MQTT processing

crown

MQTT processing
« kdy: 20. 11. 2018, 16:58:05 »
Ahoj,

bezi mi na openwrt (modry turris) mosquitto MQTT broker a Domoticz. Teprve se s tim ucim.
Potreboval bych neco, co by umelo prijimat MQTT zpravy a na zaklade toho generovat nove. Priklad - posbiralo by to zpravy ze senzoru a poslalo na zaklade toho zpravu do displeje.
Treba neco jako Node-red, ale aby to bezelo na OpenWRT.


Technik Tom

Re:MQTT processing
« Odpověď #1 kdy: 20. 11. 2018, 17:40:58 »
No a neměl by právě tohle dělat ten Domoticz?

crown

Re:MQTT processing
« Odpověď #2 kdy: 20. 11. 2018, 17:58:44 »
Domoticz odebira na mqtt kanal Domoticz/In a na zaklade toho nastavuje hodnoty senzoru. Taky publikuje data na kanalu Domoticz/Out.
Neprisel jsem na to, jak by mohl odebirat libovolny topic, zpracovat a publikovat na dalsi topic. Mam Domoticz kratce, muze to byt chyba u me.
Na webu vsichni doporucujou kombinaci mosquitto, node-red, Domoticz.

Libor

Re:MQTT processing
« Odpověď #3 kdy: 20. 11. 2018, 20:04:34 »
Delam neco podobneho (misto domoticz pouzivam openhab2). V pythonu mam maly skriptik, ktrry cte z mqtt a dle toho posila jinam a  to stejne v opacnem smeru. Node.js to je asi kanon na vrabce, ne?

karel

Re:MQTT processing
« Odpověď #4 kdy: 21. 11. 2018, 07:29:29 »
Node-RED by mel umet ty zpravy prekladat dle potreby...


Sakyn

Re:MQTT processing
« Odpověď #5 kdy: 21. 11. 2018, 10:29:35 »
NodeJS se pro to přímo nabízí, ale bohužel se mi jej s NPM na modrém Turrisu (mám 1.0 i 1.1) nepodařilo rozchodit (architektura PowerPC). Takže jsem nakonec vyřešil v Pythonu a pomocí Mosquita to navíc komunikuje na secure websocketech s tablety  ;)

crown

Re:MQTT processing
« Odpověď #6 kdy: 21. 11. 2018, 11:26:06 »
Meli byste vzor toho pythoniho scriptiku?
S pythonem se normalne nekamaradim, ale upravy snad nejak zvladnu, kdyz budu mit vzor.
Co k tomu potrebuju na turrisu doinstalovat?

Diky moc

jeniceek

Re:MQTT processing
« Odpověď #7 kdy: 21. 11. 2018, 12:11:36 »
Používám python skript a mqtt-exec jako službu.

Kód: [Vybrat]
/usr/bin/mqtt-exec -c -t /door -- /home/jan/send.py
Trvale to poslouchá na topicu /door, když přiletí zpráva, spustí skript send.py kde argumentem je obsah zprávy. Nic ti nebrání napsat si skript v bashi, který to zpracuje a pomocí mosquitto_pub pošle něco někam jinam.

crown

Re:MQTT processing
« Odpověď #8 kdy: 21. 11. 2018, 20:58:58 »
To znamena napsat si program, ktery prebere json a vyprodukuje jiny a ten odesle.

Jeste potrebuju vymyslet, jak udelat pripady, kdy potrebuju na zaklade treba trech ruznych mqtt zprav vygenerovat jinou. (tj. treba vzit tri ruzne teploty, dat do jednoho stringu a poslat na displej).
Spis nez spoustet skript pro kazdou zpravu by asi bylo fajn mit program, ktery by bezel neustale a poslouchal zpravy prubezne. Nenapada vas neco?

Libor

Re:MQTT processing
« Odpověď #9 kdy: 21. 11. 2018, 21:32:37 »
Tady delam jakoze proxy mezi bezdrátovým modulem a mqtt, asi složitější, nez co potrebujes

https://github.com/cz6ace/arduino_rpi_openhab/blob/master/rf24_service/rf24_proxy.py

Jako odpichnuti jakou knihovnu, jake API by to mohlo stacit.

crown

Re:MQTT processing
« Odpověď #10 kdy: 22. 11. 2018, 12:20:40 »
Diky, urcite pomuze. (Pro me to jsou nove veci, s pythonem jsem predtim nedelal)

Vidim, ze pouzivas knihovnu paho-mqtt. Do turrisu jde nainstalovat pip a pres nej tato knihovna.

Nasel jsem si zatim tutorialy ke knihovne a jdu si s tim hrat. http://www.steves-internet-guide.com/into-mqtt-python-client/

Technik Tom

Re:MQTT processing
« Odpověď #11 kdy: 22. 11. 2018, 21:49:26 »
Omlouvám se, ale stále asi přesně nechápu, oč  přesně Vám jde a v čem je problém.


Jeste potrebuju vymyslet, jak udelat pripady, kdy potrebuju na zaklade treba trech ruznych mqtt zprav vygenerovat jinou. (tj. treba vzit tri ruzne teploty, dat do jednoho stringu a poslat na displej).
Spis nez spoustet skript pro kazdou zpravu by asi bylo fajn mit program, ktery by bezel neustale a poslouchal zpravy prubezne. Nenapada vas neco?

Sám MQTT nepoužívám, ale myslel jsem, že princip a "výhoda" je v tom, že např. jednotlivá čidla publikují hodnoty teplot a displej se přihlásí k jejich odběru. A jelikož s největší pravděpodobností modul displeje obsahuje i nějaký procesor, tak ten z těch přijatých hodnot připraví data pro displej a zobrazí je.
Trochu jiná situace by byla, pokud využíváte nějaký hotový projekt displeje, který pouze odebírá nějaký topic a jen jej zobrazuje.
Ale i pak nepotřebujete nic extra.
Prostě čidla publikují teplotu do "domoticz/in" a v Domoticz pomocí LUA či lépe DZVents při každé změně hodnoty kteréhokoli z čidel plus navíc třeba periodicky každou minutu vytvoříte textovou zprávu pro displej a odešlete např. příkaz:

Kód: [Vybrat]
os.execute('mosquitto_pub -h 127.0.0.1 -t muj/displej -m '..mujText)
Jinak na foru Domoticzu dost uživatelů touží po nějaké funkci jako sendMQTT( ... ),
tak třeba v některé z nových verzi se obejdete bez volaní ext. programu.

A poslední poznámka - pozor na to vaše Domoticz/Out.
Viděl jsem vlákno, kde asi 30 příspěvků řešilo, proč to autorovi nefunguje, zkoušeli různé krkolomnosti a na konci autor dotazu přiznal, že místo "domotic/in" celou dobu zadával "Domoticz/in"

Re:MQTT processing
« Odpověď #12 kdy: 23. 11. 2018, 07:03:42 »
I když napsat ten skript v Pythonu je na několik málo řádek, stejně bych šel cestou Node Red. Je to ohromně mocný, pohodlný a návykový nástroj. Která jednou zkusí, už nechce jinak. ;) S NodeRed postupně objevíš netušené možnosti automatizace všemožných blbostí, který by se ti programovat nechtělo. Stojí to za to.

NodeJS se pro to přímo nabízí, ale bohužel se mi jej s NPM na modrém Turrisu (mám 1.0 i 1.1) nepodařilo rozchodit (architektura PowerPC).
To se mi nezdá, že by NodeJS na PPC nefungovalo.  Možná by stálo za vyřešení spíš tohle než nějaké krkolomné bashové skripty?

Každopádně pokud by to fakt nešlo, pořád je ještě možnost koupit OrangePi Zero (na Ebayi kolem tří stovek) a nainstalovat Node Red tam. Mám zevrubně vyzkoušeno, garantuju, že funguje.

crown

Re:MQTT processing
« Odpověď #13 kdy: 23. 11. 2018, 13:08:20 »
@TechnikTom:

Priklad je tiskarna, ktera odesila
{"_timestamp": 1542731019, "actual": 10.55, "target": 0.0}
qos : 0, retain : false, cmd : publish, dup : false, topic : octoprint/temperature/tool0, messageId : , length : 87, Raw payload : 12334951161051091011151169710911234583249535250555149484957443234979911611797108345832494846535344323411697114103101116345832484648125


Jo, muzu si upravit plugin, ale budu to muset delat s kazdou delsi verzi a ladit to. Rad bych mel logiku rizenou centralne a hloupe displeje/zarizeni, nez potom ladit kod v kazdem zvlast.
Proste si kazde zarizeni posila ve svem podporovanem formatu a centralni uzel to prechroupe a posila dal.

@Mirek Prymek
Asi to tak udelam. Mam u tiskarny temer stale bezici raspberry, tak na testy hodim node-red tam. Radsi bych to mel vsehno na jednom zarizeni kvuli jednoduchosti a spolehlivosti, ale co se da delat. Je mi jasne, ze jak si zvyknu na node-red, tak uz se mi to nebude chtit nikam presouvat a urcite ne psat vlastni.