V nadaljevanju bom sistem razširil, saj imam nove ideje. Zatemnitev ekrana kot nočni režim, izračun porabe električne energije, izračun prometa na internet, izdelava drugačnega formata prikaza za na tablico in še kaj bi se našlo. Za zdaj pa naj bo to dovolj.
Avtor: Janez Pirc
Email: janez.pircc@gmail.com
2021-301-47
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 dodal 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.
Ta vsebina je samo za naročnike
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 zaslonov. Ž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 zaslonu. 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 le potrdimo. 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 razvijalcu. Developer mode lahko nato s tem istim vmesnikom izklopimo. Tu se tudi izpiše ASR našega aparata.
V inicializacijo sem takoj za @clsrn dodal @guis ASR:0.5625rn
Seveda je potrebno format določiti tudi na oddaljenih GUI-O: @guis ASR:0.5625 PUB:””rn
In ž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>"rn");
Zatemnitev je zelo preprosta: Kot odziv na novo inicializiran @bt2 1rn pobrišem ekran ter na sredino postavim nov velik (preko celega ekrana) BT bt3, kjer določim vse barve črne.
else if (!strcmp(argument[0],"@bt2")) { //gumb na remote sendstr2("@clsrn"); //brisanje celega ekrana - vsi GUI elementi sendstr2("@guis ASR:0.5625 BGC:#000000rn"); sendstr2("|BT UID:bt3 X:50 Y:50 W:110 H:110 FGC:#000000 BGC:#000000 SBGC:#000000 SVAL:"tipka3" FSZ:10 TXT:""rn"); }
Odziv na @bt3 1rn pa je ponovna inicializacija celotnega vmesnika, ki jo izvedem na enak način, kot po nalaganju SW.
else if (!strcmp(argument[0],"@bt3")) { //gumb na remote init_request = 1; //dogodek, ki v procesing() proži reinicializacijo enako, kot @init processing(); //analiza, ki jo sicer proži nr – zaključen string }
Projekt je zaključen, HW instaliran na vikendu. Popravki in nove funkcionalnosti bodo v nadaljevanjih.