UPRAVLJANJE OGREVANJA PREKO INTERNETA - 3. DEL
-
V prvem delu sem postavil osnove: kreiral sem preklopnik na lokalnem GUI-O ter opisal vse potrebne nastavitve, da le ta deluje tudi kot IoT – preko oddaljenega GUI-O. V drugem delu sem doal funkcionalnost termometra, termostata, kreiral ostale grafične elemente, nastavil parametre, slike, video. V tretjem delu pa sledijo popravki, ki sem jih spregledal, a so ravno tako pomembni.
Določanje formata ekrana ASR.
Kot sem v prvem delu omenil, je vmesnik za upravljanje vikenda na svoj telefon dobila tudi žena. Na koncu drugega dela sem zapisal svoje zadovoljstvo, ko pa sem videl sliko na ženinem telefonu, pa je bilo jasno, da bo potrebno še kaj postoriti: Izpis temperature UID:lb_tmp je šel preko roba podlage UID:temp_container. Vzrok je v različnih formatih zaslovnov. Žena ima sodobnejši telefon z bolj podolgovatim zaslonom. Posledica je očitna. Grafični elementi, katerih velikost je vezana na pokončno dimenzijo so tu po širini večji. Pri velikosti fonta je to očitno. Pri razvoju sem imel nekoliko smole, ker sem delal na starejšem zasnonu. Načeloma moramo predvideti, kakšen bo format ekrana pri večini uporabnikov. Če delate za trg, svetujem da izberete sodoben format.
GUI-O aplikacija sledi ukazom ter ne more vedeti, ali gre nekaj čez rob namenoma, ali zaradi drugačnega zaslona. GUI-O določa velikosti glede na uporabljen zaslon, če mu z komando ne določimo formata. Zato je slika, kjer razvijamo vedno skladna z našimi nastavitvami. Rezultat je seveda na različnih zaslonih različen.
Rešitev je preprosta: Preden začnemo razvijati GUI, oziroma preden določamo W in H parametre grafičnim elementom, moramo fiksirati format ekrana, sicer delamo na lastnem formatu in ga kasneje lahko le potrdimo, ali pa prilagajamo tudi parametre. Najbolje, da izberemo pogosto uporabljen format. Ostali zasloni pa bodo odvečni prostor zapolnili z definirano barvo ozadja. To pomeni, da na bolj podolgovatem zaslonu po višini GUI-O avtomatsko doda spodaj in zgoraj pas barve ozadja tako, da na ekranu dobimo referenčni format. Seveda to velja tudi za odstopanje po širini – širši zaslon dobi pas desno in levo.
Vsi vmesniki morajo dobiti podatek o referenčnem zaslonu – to je razmerje med stranicami ASR. Podatek lahko preberemo iz tehničnih podatkov zaslona, lahko pa ga dobimo iz ANDROID naprave preko GUI-O vmesnika, če vklopimo Developer mode: Settings menu → Info → 10x pritisnemo na Application version. Odprejo se nove nastavitve, ki so namenjene razijalcu. Developer mode lahko nato s tem istim vmesnikom izklopimo. Tu se tudi izpiše ASR našega aparata.V inicializacijo sem takoj za @cls\r\n doadal @guis ASR:0.5625\r\n
Seveda je potrebno format določiti tudi na oddaljenih GUI-O: @guis ASR:0.5625 PUB:""\r\nIn ženin GUI-O je dobil zgoraj in spodaj bel rob. Obe sliki: na mojem telefonu in ženinem telefonu sta sedaj enaki.
Zatemnitev ekrana
Naslednji problem, popolnoma uporabniške narave. Žena se je pritožila, da lokalni GUI-O ponoči sveti ter zato ne more spati. Seveda sem problem rešil. Naredil sem zatemnitev ekrana.
V drugem delu bloga sem naredil različna vmesnika: na oddaljenem vmesniku je dodan gumb BT UID:bt1 ..., s katerim lahko pogledamo trenutno temperaturo. Termometer oziroma uP proti mqtt serverju ne oddaja stalno temperature, da po nepotrebnem ne povzročam podatkovni promet. Tega BT na lokalnem GUI-O ni.
Na to isto mesto na lokalnem GUI-O sem postavil drug |BT UID:bt2 ..., s katerim zatemnim ekran. V inicializacijo lokalnega GUI-O sem dodal:sendstr2("|BT UID:bt2 X:90 Y:57 W:15 H:8 BGC:#a4d4e2 SBGC:#54b2cd RAD:3 SHE:1 SHHR:1 SHVR:1 SVAL:\"tipkal\" FSZ:10 TXT:\"<b>ZA</b>\"\r\n"); //na gump na lokalnem GUI-O se izpiše ZA - zaptemnitev
Zatemnitev je zelo preprosta: Kot odziv na novo inicializiran @bt2 1\r\n pobrišem celoten ekran lokalnega GUI-O ter na sredino postavim nov velik (preko celega ekrana) BT bt3 ..., kjer določim vse barve črne.
else if (!strcmp(argument[0],"@bt2")) { //javil se je nov gumb na lokal GUI-O sendstr2("@cls\r\n"); //brisanje celega ekrana - vsi GUI elementi sendstr2("@guis ASR:0.5625 BGC:#000000\r\n"); //format ekrana sendstr2("|BT UID:bt3 X:50 Y:50 W:110 H:110 FGC:#000000 BGC:#000000 SBGC:#000000 SVAL:\"tipka3\" FSZ:10 TXT:\"\"\r\n"); //gumb - črn ekran
}
Odziv na @bt3 1\r\n pa je ponovna inicializacija celotnega vmesnika, ki jo izvedem na enak način, kot po nalaganju SW.
else if (!strcmp(argument[0],"@bt3")) { //če pritisnem na črn ekran init_request = 1; //dogodek, ki v procesing() proži reinicializacijo enako, kot @init processing(); //analiza, ki jo sicer proži \n\r – zaključen string }
Projekt je zaključen, HW je instaliran na vikendu. Popravki in nove funkcionalnosti bodo v nadaljevanjih verjetno na novem HW. Če imate kakorkoli probleme, pa le pišite. Možnosti rešitev je več in več ljudi več ve.