X
Forum

Forum

Komunikace Miniserv...
 
Notifications
Clear all

Komunikace Miniserver vs. Roomba980

5 Posts
3 Users
0 Likes
1,621 Views
(@michalverner)
Active Member
Joined: 7 years ago
Posts: 17
Topic starter  

S chutí do toho a půl je hotovo 🙂

 

Nakousli jste mě tady v zimě s tou roombou a doma jsme tak mluvili, že by bylo fajn, kdyby se uklidila, když se příjde domů byla jenom otázka času než jí to naučím.

Trochu jsem se ztratil v tom původním postu – bylo tam na mě příliš mnoho novejch zkratek. Node.js, node-red, dorita980, rest980, mqtt, zjišťování hesel.. No ale pěkně popřádku. V průběhu hraní jsem si to trošku ujasnil, tak to zkusím ujasnit i vám 🙂

Tenhle recept teda bude na to, jak naučit roombu (980) mluvit s Miniserverem.

Co k tomu budeme potřebovat?

1.       1x vysavač Roomba 980.

2.       1x něco, co si bude umět popovídat s Roombou a předat zprávu Miniserveru. V mém případě Raspberry Pi 3. Stejně dobře poslouží i jakejkoliv jinej linuxovej komp/zařízení. Ale musí splnit pár podmínek. Tomuhle zařízení budu dál říkat Malina, nebo Raspberry, nebo rasp01 jak se jmenuje u mě doma.

3.       1x Miniserver

4.       1x domácí wifi (Roomba neumí 5 GHz)

 

A bude potřeba to nějak zvlášť nastavovat? Kromě prostředníka (Maliny) ne. Tak se na ní podíváme.

Mám doma ještě Turris, takže původní idea byla rozběhat to na něm. Protože ale node.js, což je hlavní prerekvizita není ve výchozím repu dostupné, vypadl Turris ze hry.

Co teda s Malinou? Potřebujeme na ní dostat hlavně následující věci:

1.       Node.js protože na tom to všechno leží a běží. Node.js je javascriptový framework, který umožňuje relativně dost efektivní zpracování velkého množství požadavků z různých zdrojů Na konci svého jmnéna má .JS což znamená, že hlavním programovacím jazykem bude javascript. Vystupuje jako prostředník mezi zdroji OS a zpracování požadavků klientů. Ze svý hlavy to nemám, dneska jsem si to přečetl na wikipedii.

2.       Dorita980 což je knihovna od kluka (nebo holky, vlastně nevím) co si říká koalazak a po večerech s wiresharkem odchytává pakety ze svý Roomby aby tuhle svojí knihovnu naučil, jak si s roombou popovídat.

3.       Rest980 – malej webovej server, kterej slouží jako brána mezi řečí Roomby a nám z Loxone světa známých webových služeb. Taky od koalazaka/y.

4.       Node-Red – workflow nástroj, do kterýho si můžete napsat funkce který umí rozparsovat text tak abysme to nemuseli dělat v Miniserveru, ve kterém to stejně nejde. A pak to umí ještě pár dalších vychytávek. V našem toku vlastně takový prostředník 2. Jo a umí to to workflow 🙂 (pro zvídavé, česky je WF ‘Sled prací’.)

Jak jsem to dostal na malinu? Jel jsem podle návodu. Napřed

1.       Nodejs a nodered- http://nodered.org/docs/hardware/raspberrypi

2.       pak doritu – návod je tady - https://github.com/koalazak/dorita980

pozor na to, že je od firmware 2.x všechno jinak.

3.       pak rest980 - https://github.com/koalazak/rest980

 

Žádná zvláštní konfigurace nebyla třeba. Akorát vlastně s rest980 – chtěl jsem aby se to pustilo i po rebootu, tak jsem to přidal do /etc/rc.local

1

S node-red to bylo jednodušší, ale to je dobře popsaný v tom návodu.

Tak. To by bylo o prerekvizitách.

A teď hurá na node-red.

Výchozí nastavení je takový, že se to jako webová služba pustí na malině na portu 1880. Takže naťukat do prohlížeče

2

A jsme tam.

Napřed jsem si říkal, že ten rest980 vlastně nebudu potřebovat protože ta dorita je vlastně taky javascriptová knihovna, tak že ji přidám do node-red a pak budu jen volat ty metody. No ... ztroskotal jsem na tom, že asi nejsem žádnej extra programátor. Když jsem konečně přišel na to, jak to udělat, kde to vlastně má konfigurák, dal jí tam a s velkou slávou z funkce zavolal, dostal jsem odpověď za hrozně dlouho a ještě k tomu jsem s ní neuměl pracovat dál. S rest980 jako meziprostředníkem to byla brnkačka.

Rest980 – jediný co je potřeba nastavit je konfigurák, kterej říká kdo je robot a jak se k němu dostat. Ve výchozím stavu skončil v adresáři /home/pi/rest980/config jako soubor default.json

Červeně jsou ty zajímavý věci:

3

Port – port na kterém rest980 webová služba poslouchá,
výchozí je 3000.
Blid – username
Password – heslo
(získání hesla a blidu je popsaný v dokumentaci
k dorita980)
RobotIP – mám pocit schroupe i DNS jméno
Firmware version – 2 bude asi pro všechny ta správná volba,
pokud má vysavač verzi fw >
2. (došlo tam k nějaký výraznější změně která je popsaná
v jinym threadu tadytoho fóra)
EnableLocal – yes = tímhle způsobem k roombe
přistupujeme.
enableCloud – no = když jsem instaloval, tak tuhle variantu
neměl koalazak ještě hotovou.
keepAlive – yes byl default.

Otestovat se to dá tím, že prohlížeč na to nasměrujete. Třeba do adresáře

/map/
U mě  http://rasp01:3000/map 

Ta ale ne vždycky funguje, takže třeba taky takhle:

 http://rasp01:3000/api/local/info/state 

což vrátí JSON soubor kterej začíná nějak takhle:

{"netinfo":{"dhcp":true,"addr":3232235781,"mask":4294967168,"gw":3232235777,"dns1":3232235777

A je v něm vlastně aktuální stav roomby.

A to je vlastně volání který pak použijeme i v node-red, abychom získali stav. Jde to samože zavolat i z Miniserveru, ale max. 1x za 10s a parsovat to bych teda fakt nechtěl 🙂

 

V node red stačí pak už jen vytvořit nový flow z těchto objektů:

Input =>
inject
4

 

Který každých 10 sekund pošle dalšímu prvku aktuální čas.

Pak ten http get na stav roomby

Function =>
http request
5

Pak teda něco co to rozparsuje:

6

A pak něco co to pošle Miniserveru

7

 

Celý to pak vypadá takhle:

8

 

A ta funkce co řeší parsování vypadá takhle. Asi nic supr programátorskýho, ale funguje to:

Je tak dlouhá hlavně proto,  že je docela chytrá. Zprávy ven posílá jen když se něco změnilo. 

Na debugování se mi osvědčil

node-red-log 

v terminálu a výraz

console.log("TOHLE SE ZALOGUJE");

Na straně Miniserveru pak stačilo přidat virtuální UDP vstup

9

K tomu vstupu jednotlivý virtual UDP input commands

 

10

Tady pozor na to že i když by to někde dávalo smysl, tak use as digital input asi funguje jinak než by kdokoliv čekal, takže já jsem s použitím neuspěl.

A analogicky potom doplnit další udp commandy.

Co chodí z node-red je vidět v UDP monitoru

11
12
13

 

Ovládání ještě nemám, ale to nebude žádná věda a půjde to přímo přes http get command z Miniserveru na rest980.

 

Uff... teda.. asi jsem toho mohl říct víc, ale to nejpodstatnějsí je snad venku. Nemám rád tenhle webovej editor na příspěvky 🙂


   
Quote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1880
 

Len sa mi zda, alebo je tu tento thread 3x? 😀


   
ReplyQuote
(@michalverner)
Active Member
Joined: 7 years ago
Posts: 17
Topic starter  

nene! vzdyt jsem dal vzdycky jenom update!!

Tak jestli prijdu na to jak ty ostatni smazat tak to udelam :))

--DONE--


   
ReplyQuote
(@koldavideo)
Member
Joined: 7 years ago
Posts: 1780
 

@ michalverner : díky za návod 🙂 

Konečně se mi podařilo na tom nasu rozjet v dockeru ten container rest980. Node-red taky běží a posílá UDP na miniserver. Zde jsem zatím skončil, a zatím jsem s tím nehnul. Zřejmě mi nefunguje dobře to parsování v node red. Nicméně teď nejsem online takže doma vyzkouším a napíšu kam jsem se dostal 🙂

Díky.


   
ReplyQuote
(@michalverner)
Active Member
Joined: 7 years ago
Posts: 17
Topic starter  

hmm ... divny, zkusil jsem se podivat, co jsem to sem dal - rozbity konce radku ... copy paste linux/win.. treba to bude mit nejakej efekt, protoze jsem nekde zapomnel na nejakej strednik.

Chtel jsem sem nahrat verzi, ktera je dobre odradkovana, ale zjistil jsem, ze ty radky maze tady ten redakcni system .... Tak ja nevim jak to vypublikovat, zadnej svuj web nemam.. tak asi na pozadani mailem?

M.


   
ReplyQuote
Share: