FHEM - Hausautomations-Systeme > MQTT

MQTT2 für Worx Landroid Mähroboter

(1/69) > >>

Otto123:
Hallo Rasenmäher User,

es gibt für den LANDROID von Axel Mohnen ein Modul was irgendwann in diesem Thread entstanden ist.
Angeregt und mit Hilfe von diesem Beitrag habe ich eine Alternative gebaut.

Zur Vorbereitung braucht man ein Tool welches als Windows oder Linux Version zur Verfügung steht. Windows Version V0.0.24 - Net.zip hat bei mir funktioniert. Man startet das Tool, trägt seinen Cloudzugang ein und erhält folgende Informationen:

* Broker Server Adresse
* Board ID z.B. bei den 2019 Modellen PRM100
* Mac zwölf stellig
* SSL Zertifikat AWS.p12 - liegt nach der Anmeldung im gleichen Pfad wie das ToolDas Zertifikat von Windows auf den FHEM Server bringen (Pfad anpassen):

--- Code: ---scp "D:\mqtt\WorxLandroidDeskApp\AWS.p12" pi@raspib3:
--- Ende Code ---

Ab jetzt sind alle Befehle zeilenweise für die FHEM Kommandozeile oder Blockweise für die Raw Definition!
Auch hier wieder den Pfad anpassen, wenn man nicht den Pfad /home/pi für das Zertifikate verwendet hat.


--- Code: ---"openssl pkcs12 -in /home/pi/AWS.p12 -nokeys -passin pass: -out aws.cer -clcerts"
"openssl pkcs12 -in /home/pi/AWS.p12 -nodes -passin pass: -out aws.key -nocerts"
"chmod 0600 aws.*"
--- Ende Code ---
Das Template ist seit heute im SVN, wer ein halbwegs aktuelles FHEM hat kann das Template aktualisieren:

--- Code: ---{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }
--- Ende Code ---
Bitte auf Erfolg und Fehlermeldungen prüfen.

Jetzt in FHEM den Connector zum Broker herstellen und testen. Die entsprechenden Daten eintragen!

--- Code: ---define MQTT_Worx MQTT2_CLIENT <broker-server-adresse>:8883
attr MQTT_Worx SSL 1
attr MQTT_Worx autocreate simple
{my $uuid=substr(genUUID(),0,36);;fhem("attr MQTT_Worx clientId android-$uuid")}
attr MQTT_Worx keepaliveTimeout 600
attr MQTT_Worx mqttVersion 3.1.1
attr MQTT_Worx msgAfterConnect <BoardID>/<MAC>/commandIn {}
attr MQTT_Worx sslargs SSL_version:TLSv12 SSL_cert_file:aws.cer SSL_key_file:aws.key SSL_use_cert:1
attr MQTT_Worx subscriptions <BoardID>/<MAC>/commandOut
--- Ende Code ---
Hat man alles richtig gemacht, geht der state des Devices MQTT_Worx sofort auf opened.
Die erste Übertragung sollte automatisch ein neues MQTT_DEVICE erstellen.

Hinweis: Die clientID darf nicht mehrfach gleichzeitig zur Anmeldung verwendet werden, das führt binnen sekunden zur Sperre des Accounts für 24h. Ein echter Umzug der Definition in eine andere Instanz ist kein Problem. Die Anzahl der gleichzeitigen Verbindungen mit unterschiedlicher clientID ist scheinbar nicht limitiert.
Die clientID muss diese Form haben: android-ab345678-cd12-ef56-ab90-cd3456789012
Was dem Vorsatz android- plus einer 32 stelligen GUID (durch 4 Bindestriche eine Gesamtlänge von 36 Zeichen) entspricht.

Auf dieses Device wird jetzt das Template angewendet und damit konfiguriert.

--- Code: ---set MQTT2_.*:FILTER=IODev=MQTT_Worx attrTemplate worx_landroid
--- Ende Code ---
Die erfolgreiche Anwendung des Templates erzeugt ein Reading AttrTemplateVersion und ein Attribute model worx_landroid_mover.
Das Template übersetzt eine Reihe Readings in sprechende Namen und erzeugt vor allem mit der setList alle notwendigen Steuerbefehle für den mower.
Sollte die Befehlszeile nicht funktionieren, kann man das Template auch im set Befehl auswählen: worx_landroid

Bleibt der Connector MQTT_Worx auf disconnected -> die Zertifikate prüfen:

--- Code: ---{qx(ls -lha /opt/fhem/aws.*)}
--- Ende Code ---
Das Ergebnis sollte so aussehen:

--- Code: ----rw------- 1 fhem dialout 1.4K Jun  9 13:27 /opt/fhem/aws.cer
-rw------- 1 fhem dialout 1.8K Jun  9 13:27 /opt/fhem/aws.key
--- Ende Code ---

Man kann auch in die Dateien reinschauen und genauer prüfen:

--- Code: ---{qx(openssl rsa -in aws.key -check|grep 'RSA key ok')}
{qx(openssl x509 -in aws.cer -noout -text|grep Issuer -A7)}
--- Ende Code ---
Beim ersten Befehl sollte einfach die Zeile RSA key ok kommen, beim Zweiten ein paar Infos über das zertifikat:

--- Zitat ---        Issuer: OU = Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US
        Validity
            Not Before: Apr 30 15:33:19 2019 GMT
            Not After : Dec 31 23:59:59 2049 GMT
        Subject: CN = AWS IoT Certificate
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
--- Ende Zitat ---

Viele Spass beim Testen

Otto

Beta-User:
Hi Otto,

das liest sich sehr gut!

Vielleicht noch ein paar Optimierungsoptionen - im Sinne eines Angebots:
- in der desc sollten wir auf diesen Thread verweisen und kurz erläutern, dass man etwas Vorbereitung braucht.

- soweit ich das verstanden habe, braucht jeder Mower auch seinen eigenen Broker-Zugang (=MQTT2_CLIENT), für alles zusammen brauchen wir eigentlich drei Parameter (Server (Broker)-IP, BoardID und die MAC)?
Dann könnte man über ein "deviceloses" attrTemplate - anzuwenden von einem beliebigen MQTT2_DEVICE aus - alles auf einen Rutsch machen, indem man die (ggf. fehlenden) Sachen anfragt und auch das IO-Device direkt mit anlegt (indem man prüft, ob die IP-Adresse als DEF schon irgendwo vorhanden ist); hinterher ein "show (NEW_DEV|NEW_IO)".

Das ist dann aber wirklich "Kür"...

Sonst: Hut ab!

Otto123:
Das mit dem desc mache ich!
Das mit dem eigenen Broker ist eine interessante Frage ;) Ich weiß nicht wie viele den Zweitmäher eingebunden haben?
Ich bin da unsicher mit dem eigenen Broker Zugang, eigentlich ist der Broker Zugang erstmal nur ein Account. Unter dem kann man mehrere Mäher (Geräte?) registrieren.
Eventuell braucht man also die Topics gar nicht im Detail? Schau ich mir mal noch an.

attrTemplate direkt als "Setup" zu verwenden - da hab ich auch schon so ein bisschen drüber nachgedacht :)

Beta-User:
Das mit dem account dürfte richtig sein, kann also sein, dass das nicht 100% zielführend ist. Man könnte es aber abfragen, die 8883 scheint ja gesetzt zu sein. Ungetestet:

--- Code: ---par:RADIO_CREATE_IO;Also create a MQTT2_CLIENT device: Enter IP address;{ undef }
par:RADIO_USE_EXISTING_IO;Use existing IO for Port 8883;{my @devices=devspec2array("TYPE=MQTT2_CLIENT:FILTER=DEF~:8883");;return 1 if $devices[0];;return undef}
--- Ende Code ---
Das mit den Parametern und option-Zweigen (und wann man ggf. escapen muß) ist vermutlich am einfachsten über die Sprachsteuerungstemplates bzw. deren Ansteuerung bei mehrkanaligen zu verstehen (siehe auch als Einstieg den changelog von heute morgen, da habe ich das für den 2.5-er Shelly dazugebastelt).

Es gibt (wenige) templates, die weitere Devices bauen oder bestehende andere verändern, aber "show" wäre vermutlich auch bei den mehrkanaligen noch so ein Thema, das ich mal angehen könnte, und das FHEMWEB-Umbiegen findet sich z.B. so:
--- Code: ---{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=IODEVNAME'" if($cl && $cl->{TYPE} eq "FHEMWEB") }
--- Ende Code ---
Sollte leicht auf show anzupassen sein...

(Das ganze ist jetzt aber der Kurs für Fortgeschrittene und angehende Maintainer ;) !)

deeb:
Hallo Otto123,

klingt ja gut, werde ich auch installieren.
Eine praktische Frage hätte ich aber vorab noch.
In dem Modul von Axel Mohnen wird meiner Meinung nach nicht die wöchentliche Mähzeit angezeigt, die man von den normalen Werten ausgehend prozentual verringern oder erhöhen kann.
Wenn man in der Android-App den Wert auf -100% stellt, bleibt der Landroid in der Ladestation.  Das ist für mich wichtig, weil ich für die Ladestation eine Überdachung/Garage gebaut habe. Dadurch registriert der Landroid mit seinen Regensensor aber nicht, wenn es "draussen" regnet. Das bedeutet, er fährt zur geplanten Mähzeit - auch bei strömenden Regen - los, merkt das es regnet und dreht entlang des Begrenzungsdrahtes noch eine Ehrenrunde, bevor er regennass dann wieder in seine Garage fährt.
Dies alles könnte man mit Fhem vermeiden, sofern man für seinen Rasen die aktuellen Wetterdaten hat.
In dem von dir genannten Windows-Tool wird dieser Wert (Erhöhung/Verringerung der wöchentlichen Mähzeit) angezeigt/ausgewertet. Auch bei deiner MQTT-Verbindung?

deeb

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln