[RPi] GUI pro zobrazení hodnot ze souboru na LCD

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #15 kdy: 12. 12. 2015, 11:59:54 »
Koukám, že Saky došel k prakticky stejným závěrům a technologiím jako já, to potěší :) Drobný poznámky:

primárně pak MQTT client [...] Ten má oproti API výhodu v trvalém spojení
Kdyby náhodou trvalé spojení u MQTT bylo problém (např. pokud chci MCU vypínat kvůli šetření energií a spojení se mi nechce pokaždé rušit a znovu navazovat, takže by mi spadlo samo), dá se použít právě ta verze MQTT-SN, která s "mizením" klientů počítá.

Navíc díky trvalému spojení  na serveru vidím, zda je periferie online a dokáži na rozpadnutí spojení reagovat ihned na obou stranách.
Poznámka pro kolegy s MQTT méně zkušené: Na tohle se výborně hodí použít MQTT last will: při startu pošlu na topic /hebla/heblo1/live třeba "1" s nastaveným flagem retained, last will topic nastavím na /hebla/heblo1/live a last will message na "" (prázdná zpráva). Tím mám automaticky zabezpečeno, že na /hebla/+/live dostanu v každém okamžiku seznam hebel, který jsou skutečně živý. Last will mechanismus mi zaručí, že i při nějakém nekorektním odpojení klienta se tam dostane ta správná hodnota (prázdná zpráva).

Prázdná zpráva způsobí, že se retained message na tom daném topicu na brokeru smaže, takže zprávy z /hebla/+/live nemusím vůbec parsovat, stačí mi si z topicu vyparsovat id hebla. A navíc můžu mít i "efemerní hebla" - tj. klienty, kteří použijí náhodně generované ID a jenom na chvilku. Protože se topic /hebla/RANDOM_ID/live po odpojení automaticky smaže, nemusím se bát, že by mi počet topiců na brokeru rostl.

Další výhodou je pak přímé spojení pomocí WebSocket
Velice vřele můžu (nejen) pro programování s WebSockety doporučit Elixirový webový framework www.phoenixframework.org - je naprosto skvělý, brutálně rychlý a s websockety se tam pracuje nádherně (a díky Elixiru/Erlangu je to úplně přirozený, včetně nějakých asynchronních událostí apod.).

Momentálně kromě topení pracuji na OTA aktualizacích
Dobrá připomínka! Na to je taky vhodný myslet, zvlášť pokud počet sensorů roste. Pro Arduino/Atmel existuje několik způsobů - Atmel na to má docela dobře připravený návrh, kód bootloaderu je od vlastního programu úplně oddělený, existují různé bootloadery, já jsem třeba používal TFTP.


Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #16 kdy: 12. 12. 2015, 12:03:51 »
doporučit Elixirový webový framework
...a když už jsme u toho, měl bych si přihřát polívčičku :)

https://github.com/mprymek/fulight

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #17 kdy: 12. 12. 2015, 13:12:10 »
Hraju si teď se zahnradem. Vypadá to celkem obstojně, nicméně RPi má load average 3.5 s demo kódem (kterej jsem navíc z 80% promazal). Má to hodně pomalou odezvu (i na hloupej checkox, kterej navíc nic nedělá, jen se graficky zaškrtne). Vypadá to víceméně tak, jak jsem si představoval, ale chová se to nedobře...

Teď nevím, jestli jít teda do Pygame nebo do toho webu... Web je mi bližší, ale nevím, jestli chci jít cestou AJAXu nebo podobných technologií a bez nich to je zase k ničemu... Jakej prohlížeč byste použili? Mám teď na mysli to, aby se dal spustit v režimu kiosk a ideálně zcela bez adresního řádku, lišt a menu. Aby to jelo prostě totálně čistě fullscreen. A pojede na RPi, tak aby to ten ARM nesežralo :-D

Mirek: Jo, měl bych míň hrát a víc makat :-) Co se kotle a nejhorších scénářů týče, je to všechno navržený, aby to jelo paralelně s kotlem, tedy nekecalo do logiky kotle. Kotel si dál pojede podle svýho (přikládání, bezpečnostní uhašení, zapínání čerpadla, zastavení při přehřátí apod.), ale já mu do toho budu moct bez jeho vědomí sahat (například zastavení přikládání, pokud by náhodou zhasnul nebo ruční přepnutí ohřevu TUV z kotle apod.). Je to navržený tak, aby při chcípnutí RPi všechno jelo, jako by tam žádný RPi nikdy nebylo... Chci to jako doplněk, ne jako náhradu původní logiky ;-)

Wifi jsem zvolil pro úplnou jednoduchost a možnost sahat na to z PC nebo mobilu.

Arduino jsem nezatratil, bude připojený k senzorům a přijímačům a do RPi do dostanu USB kabelem. Je levnější případně oddělat I/O piny na Arduinu než na RPi... :-) RPi navíc v obýváku a kotelně mi energeticky extra nevadí, vzhledem k tomu, co tím získám (teploty v různých místech systému, dobrá ovladatelnost víceméně všeho apod.)

433MHz moduly za 40Kč mam, není to hitparáda (spolehlivost a dosah), ale vzhledem k NRF24L01, který mam taky, je to luxus (dosah). Tyhle kravinky mě zklamaly. Pravda, dal jsem za těch asi 10 kusů všeho cca 250Kč, technicky jsou funkční, ale těžko využitelný. Obzvlášť ne na takovou aplikaci, tady potřebuju jistou spolehlivost...

Saky

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #18 kdy: 12. 12. 2015, 14:36:54 »
Pokud jde o lišty atd, ve fullscreen nejde browser poznat, akorát samozřejmě horní lišta tabletu, atd..

Nebudu sem cpát obrázky a další, ale pár věcí jsem postoval na jiné forum (jsou tam screeny staršího rozhranní i reálné fotky). Je tam také video, tam jde vidět odezva (mám tam implementovanou syntézu řeči, takže to mluví :D. K té rychlosti, všimněte si, že při kliku na tlačítko, se poše pomocí WS event, server kontaktuje TTS servery, nechá syntetizovat náhodnou odpověď, vrátí to tabletu a ten teprve přehraje...

Takže je tam zpoždění díky requestu na syntézu, jinak je to prakticky nepostřehnutelné.. než pohnu s prstem s buttonku, relé již dávno cvaklo..

Rozhranní vypadá už úplně jinak, je multiobrazovkové, ale princip zůstal :-)

URl: https://www.turris.cz/forum/topic_show.pl?tid=886

gui_guru

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #19 kdy: 12. 12. 2015, 15:10:43 »
Hraju si teď se zahnradem. Vypadá to celkem obstojně, nicméně RPi má load average 3.5 s demo kódem (kterej jsem navíc z 80% promazal). Má to hodně pomalou odezvu (i na hloupej checkox, kterej navíc nic nedělá, jen se graficky zaškrtne). Vypadá to víceméně tak, jak jsem si představoval, ale chová se to nedobře...

Ten load je hodne podezrely (diky tomu to ma tu pomalou odezvu). Ktery vykreslovaci backend jste pouzil? Pokud X11 a vse pocita CPU (tady se hodi kompilovat alespon s -O2; prosim nezapomenout, ze dema Zahnrad se by default kompiluji s -O0) a zaroven mate nastavenou prilis vysokou snimkovou frekvenci a zaroven jste si nevypnul napr. vlozene asserty v Zahnrad, tak bychom se asi dostali na takto nizky vykon (zvlast pokud provozujete RasPi na nizsich uspornejsich frekvencich). Zkusil bych snimkovou frekvenci pro zacatek 25 snimku ve spojeni s OpenGL (ktere je na RasPi akcelerovane) a vypnul asserty v Zahnrad.


Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #20 kdy: 12. 12. 2015, 17:02:53 »
433MHz moduly za 40Kč mam, není to hitparáda (spolehlivost a dosah), ale vzhledem k NRF24L01, který mam taky, je to luxus (dosah). Tyhle kravinky mě zklamaly. Pravda, dal jsem za těch asi 10 kusů všeho cca 250Kč, technicky jsou funkční, ale těžko využitelný. Obzvlášť ne na takovou aplikaci, tady potřebuju jistou spolehlivost...
U těch NRF mě dosah taky zklamal a jedinej způsob, jak se mi ho podařilo dostat na použitelnou úroveň, je právě ten mesh. U heterodynů je rozumnej dosah hodně otázka softwaru - je potřeba nízká rychlost, krátká zpráva, nějaký checksum, dost opakování a v případě potřeby i potvrzování. S tímhle vším je to pak v pohodě použitelný. Spínám tím zásuvku za pár šupů ze supermarketu (něco takovýhodle http://www.nej-ceny.cz/produkty/original/631429.jpg) přes celej barák. Výhodou je, že na všechny ty potřebný serepetičky, se kterýma to má použitelnej dosah, jsou pro Arduino knihovny.

Ještě se mně hrozně líbila tahle vychytávka: vzít levnou meteostanici taky ze supermarketu a přes 433 si na ni posílal jakýkoli čísla emulací dalšího sensoru :) Zatím jsem neměl čas to vyzkoušet, ale jako nápad mi to přijde parádně vychytralý :)

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #21 kdy: 12. 12. 2015, 17:16:13 »
Jo a ještě k tomu browseru v kiosk režimu: mělo by stačit použít Firefox, spouštět ho z nějakýho skriptu, kterej ho při pádu případně restartne, nastavit výchozí stránku na to, co potřebuješ, nainstalovat doplněk https://addons.mozilla.org/cs/firefox/addon/r-kiosk/ a v profilu dát do souboru user.js potřebný volby. Mně zatím stačilo:
Kód: [Vybrat]
user_pref("rkiosk.navbar",false);
user_pref("browser.fullscreen.autohide",true);
user_pref("app.update.enabled",false);

dustin

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #22 kdy: 12. 12. 2015, 18:11:36 »
URl: https://www.turris.cz/forum/topic_show.pl?tid=886

Kdyby se ti nelíbil ten ošklivý nabíjecí kabel ze zdi to tabletu, stačí zezadu tabletu nalepit oboustranou lepenkou dva nerezové plíšky, přiletovat  je skrz zadní stranu tabletu uvnitř  přes shottky diodu na 5V napájení tabletu a na zeď našroubovat malé víčko z hranaté elektro krabice, ve kterém jsou zevnitř zapuštěné neodymové magnety z rozbitého HDD. Jsou poniklované, takže výborně vodí, k nim (jejich plechovým držáčkům) jsou zevnitř přišroubované dráty s 5V (adaptér mám umístěný rovnou v klasické zásuvkové krabici pod tím deklem, do ní zavedeno 220V. Tablet dekl přikryje, takže není vůbec vidět. A když chceš tablet někam vzít, stačí odtrhnout od magnetů, drží až moc. Cvakneš na magnety a za chvíli je dobito.

Saky

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #23 kdy: 12. 12. 2015, 19:06:38 »
Díky za tip, ten kabel je samo provizorka a budu hledat řešení, jak to udělat estetičtěji :-)))

Za pár týdnů pouštím do malosériové výroby radiátorové hlavice které mají HTTP API + MQTT/websocket klienta, k čemuž kromě jiného nechávám vyrobit kryt, takže jsem zvažoval prototypově i nová záda tabletu s kontakty, na zadní straně, takže zeď by sloužila jako "dokovačka", ale možná to doma vyřeším jak píšete :-) Díky ;)

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #24 kdy: 12. 12. 2015, 19:08:21 »
Za pár týdnů pouštím do malosériové výroby radiátorové hlavice které mají HTTP API + MQTT/websocket klienta
Tybrďo, to přesně potřebuju! Můžeš dát víc info?

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #25 kdy: 12. 12. 2015, 20:38:52 »
gui_guru: Ten load je podezřelej. Jel jsem to přes X11, CPU bylo vytížený na cca 25% (X 16%, zahnrad 5%, htop 4%), podle iotop se nic nedělo, síťovej provoz nulovej...

Zkouším Pygame, vypadá to na míň problémů a rychlejší zprovoznění (než na důchod :-D ).

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #26 kdy: 12. 12. 2015, 23:23:34 »
Tak mám v Pygame rozvrženej layout. Čeká mě ještě spousta věcí, ale je už téměř jasný, že to budu dělat celý v tom, pracuje se s tím skvěle a existuje asi miliarda a půl návodů na skoro všechno.

Díky za tipy

gui_guru

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #27 kdy: 12. 12. 2015, 23:52:33 »
gui_guru: Ten load je podezřelej. Jel jsem to přes X11, CPU bylo vytížený na cca 25% (X 16%, zahnrad 5%, htop 4%), podle iotop se nic nedělo, síťovej provoz nulovej...

Zkouším Pygame, vypadá to na míň problémů a rychlejší zprovoznění (než na důchod :-D ).

Tak to je dobre, ze Vam Pygame jede. Jenom ze zvedavosti, ktery vykreslovaci backend pouzivate v Pygame? Myslim, ze default je SDL a to samozrejme pojede jedna basen v porovnani s posilanim hromady low-level primitiv pomoci X11 protokolu ;) Mimochodem kolik CPU si vezme Pygame? To musi byt imho docela dost (je to Python a i s jednoduchymi hrami byvaji nekdy v Pygame problemy na silnych masinach, pokud se pouziva SDL 1.2).

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #28 kdy: 14. 12. 2015, 13:56:07 »
gui_guru: Kámo, Ty se mě ptáš na moc věcí :-) Já nemám páru, čím/jak to vykresluju. Spustím si X server, exportuju XAUTHORITY, DISPLAY a pak pustím ten python skript a on mi prostě jede na displeji (takže X11?).

Jedu částečně podle návodu, kterej tu někdo poslal (česky) - tam jsem pochytil základy, kreslení obdélníků apod.; a ta podle návodu na nějakou "hru", kde jsem se naučil psát text a teď odtamtud opisuju tlačítka ;D

Líbí se mi to, protože je kód docela dobře čitelný, syntaxe je v pohodě (už jsem něco někdy psal, takže tohle je sice neobvyklý bez {}, ale dá se to v pohodě), pygame je luxusně jednoduchý a efektivní. Zatím mám jen staticky vypsaný věci na displeji, abych věděl, kde co je a kolik to zabere, interakce ještě není. Dneska večer chci začít tahat hodnoty ze souboru a refresh 1x za sekundu + přidat mačkání tlačítek (zatím jen mačkání a změna červený/zelený, bez interakce na pozadí).

CPU to nežere moc, asi do 20%, ale opakuju - nic to vlastně nedělá. Load average je ale zase 3... (ano, už jsem udělal update FW RPi, tím to tedy není). Uvidíme, jakou to chytne odezvu, až to bude interaktivní.

Když už se mi podruhý ptáš, čím vykresluju, hlodá mi to v hlavě. Asi bych se měl podívat, jak to dělat jinak. Takový OpenGL by nebylo marný (když by to šlo přes GPU).

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #29 kdy: 18. 12. 2015, 11:44:29 »
Mám nějaké poznatky, pokud by to někoho zajímalo.

Jak jsem už psal, nadhazuju si po nastartování RPi vlastní X server instanci na kterou pak přímo Pythonem kreslím na fullscreen layout.

Používal jsem zpočátku příkaz pygame.display.update(), ale je to pro mé účely špatné řešení - nemusím neustále překreslovat celý displej, to totiž neskutečně žere prostředky. Ne, že by CPU jelo naplno, ale framerate msíto 50 klesne pod 10 a je nestabilní.

Nakonec používám pro změnu věcí na displeji stejnou funkci, ale na různých místech a s parametrem, který jí říká, jakou část displeje překreslit (obdélník). Takhle překresluju všechny proměnlivé oblasti.

Tlačítka: Nakreslím obdélník, dám do něj text a registruju zda je myš v obdélníku a zda je v tu dobu stisknuté tlačítko (mouse.get_pressed). To ale funguje naprosto nespolehlivě, proto jsem nahradil mouse.get_pressed něčím lepším - eventem MOUSEBUTTONDOWN, který reaguje jen na samotný stisk a nebere v potaz držení.

Těmito způsoby jsem dostal rychlé GUI (50fps, až zbytečně rychlé, žere 20% CPU, nastavil jsem to na 25fps a je to na 13% CPU; připomínám, GUI momentálně jen zobrazuje a překresluje, není ta žádný další kód na získávání a zpracování hodnot) a spolehlivě funkční tlačítka.

Teoreticky jsem s touhle částí prozatím hotov. Ještě mne čeká nakreslení dalšího GUI - teď mám zobrazovací, ještě potřebuju udělat nastavovací.