MQTT2 für Worx Landroid Mähroboter

Begonnen von Otto123, 09 Juni 2020, 13:55:43

Vorheriges Thema - Nächstes Thema

remo

Zitat von: frober am 20 April 2023, 14:53:57
Zitat von: remo am 20 April 2023, 14:39:47Ich bin gerade etwas überfordert/verwirrt.
Wie ist denn aktuell der Stand?
Fertig? Einsatzfähig? Testbetrieb? Gibt's nur Readings oder funktioniert auch die Steuerung?
Ich blicke gerade nicht durch ???

Was hat es mit dem XX auf sich?
Sollte ich das autocreate-Attribut setzen?


define m2c MQTT2_CLIENT XX
attr m2c connectFn {use LandroidUtils;;Landroid_connect($NAME,"worx",1)}
attr m2c username user@host
set m2c password geheim


Aktuell, funktioniert es soweit.
XX ist nur ein Platzhalter für die Definition, da hier die URL nicht benötigt wird. Diese wird über "connectFn" ermittelt.
Username + Passwort sind deine Zugangsdaten.

Betriebssystem ab Stretch



Genial.
Danke für eure Arbeit!!!!


Hier ein List:

Internals:
   BUF       
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        XX
   DeviceName iot.eu-west-1.worxlandroid.com:443
   FD         8
   FUUID      xxxxxxxxxx
   NAME       m2c
   NR         908
   PARTIAL   
   SSL        1
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   autocreate 1
   clientId   xxxxxxxxxx
   devioLoglevel 4
   eventCount 3
   landroidType worx
   lastMsgTime 1682057471.67001
   mqttEndpoint iot.eu-west-1.worxlandroid.com
   nextOpenDelay 180
   nrConnects 1
   userId     xxxxxxxxxx
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2023-04-21 08:11:11   state           opened
     2023-04-21 08:08:55   wxid            xxxxxxxxxx
   sslargs:
     SSL_alpn_protocols mqtt
Attributes:
   autocreate simple
   connectFn  {use LandroidUtils;Landroid_connect($NAME,"worx",1)}
   execAfterConnect { my $h=$defs{$NAME};MQTT2_CLIENT_doPublish($h,'PRM100/xxxxxxxxxx/commandIn','{}')}
   keepaliveTimeout 600
   maxFailedConnects 20
   nextOpenDelay 180
   room       TEST
   subscriptions PRM100/xxxxxxxxxx/commandOut
   username   xxxxxxxxxx


State ist opened
WXID ist auch gesetzt.

Mehr Readings bekomme ich aber leider nicht ...

frober

Zitat von: remo am 21 April 2023, 08:14:50State ist opened
WXID ist auch gesetzt.

Mehr Readings bekomme ich aber leider nicht ...

Du solltest ein neues MQTT2_Device bekommen haben, darin findest du die Readings.
Ansonsten wäre ein Logauszug hilfreich...
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#632
Hallo Rudi,

die Korrektur im MQTT2_Client funktioniert, Error-Meldung ist weg, Cient geht direkt nach Neustart auf opened und das ständige dis-/connect ist auch beseitig.

Leider gibt es noch ein Problem, hatte ich schon mit der fhem.cfg.landroid geschrieben. Es wird kein Device mehr angelegt.
Ich habe es gerade auf dem Testsystem nachgestellt.

verbose 5
Zitat2023.04.21 09:28:26 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2023.04.21 09:28:47 5: {"token_type":...
2023.04.21 09:28:47 4: MQTT_Worx: Got auth info, type password
2023.04.21 09:28:47 5: {"id":...
2023.04.21 09:28:47 4: MQTT_Worx: Got userId: xxx
2023.04.21 09:28:48 5: [{"id":...
2023.04.21 09:28:48 4: MQTT_Worx: Got device info
2023.04.21 09:28:48 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2023.04.21 09:28:48 5: HttpUtils url=https://iot.eu-west-1.worxlandroid.com:443/ NonBlocking via https
2023.04.21 09:28:48 4: IP: iot.eu-west-1.worxlandroid.com -> 34.254.38.56
2023.04.21 09:28:49 5: MQTT_Worx: sending CONNECT (16)(196)(11)(0)(6)MQIsdp(3)(130)....
2023.04.21 09:28:49 5: DevIo_SimpleWrite MQTT_Worx: ....
2023.04.21 09:28:49 5: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.04.21 09:28:49 4: MQTT_Worx received CONNACK
2023.04.21 09:28:49 5: MQTT_Worx: received CONNACK (0)(0)
2023.04.21 09:28:49 5: MQTT_Worx: sending SUBSCRIBE (130)#(0)(22)(0)(30)PRM100/xxxx/commandOut(0)
2023.04.21 09:28:49 4: MQTT_Worx received SUBACK
2023.04.21 09:28:49 5: MQTT_Worx: received SUBACK (0)(22)(0)
2023.04.21 09:28:49 5: MQTT_Worx: sending PUBLISH 0!(0)(29)PRM100/xxxx/commandIn{}
2023.04.21 09:28:49 4: MQTT_Worx received PUBLISH
2023.04.21 09:28:49 5: MQTT_Worx: received PUBLISH (0)(30)PRM100/.....
2023.04.21 09:28:49 5: MQTT_Worx: dispatch autocreate=no\000WX_USER_....
2023.04.21 09:29:58 5: MQTT_Worx: sending DISCONNECT (224)(0)
2023.04.21 09:29:58 5: DevIo_SimpleWrite MQTT_Worx: e000

Sollte anstelle von "MQIsdp" nicht "MQTT" stehen?
"autocreate=no" obwohl ich autocreate auf 1 habe


Nachtrag:
auch mit einem manuell gesetzten
attr MQTT_Worx autocreate simplewird kein Device angelegt
2023.04.21 09:49:37 5: MQTT_Worx: dispatch autocreate=simple\000WX_USER_....
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

remo

Zitat von: frober am 21 April 2023, 09:11:49
Zitat von: remo am 21 April 2023, 08:14:50State ist opened
WXID ist auch gesetzt.

Mehr Readings bekomme ich aber leider nicht ...

Du solltest ein neues MQTT2_Device bekommen haben, darin findest du die Readings.
Ansonsten wäre ein Logauszug hilfreich...


Kann ich leider nicht bestätigen...

frober

Zitat von: remo am 21 April 2023, 10:11:30Kann ich leider nicht bestätigen...

siehe meinen vorherigen Post...
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

@Rudi, keine Ahnung, ob das beabsichtigt ist.

Ohne ein attr MQTT_Worx autocreate simple ist {$defs{MQTT2_Worx}{autocreate}} undef.
Mit bekomme ich eine 0 oder 1, je nach "Einstellung" von "connectFn".

Device wird aber aktuell so oder so nicht angelegt.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

ZitatLeider gibt es noch ein Problem, hatte ich schon mit der fhem.cfg.landroid geschrieben. Es wird kein Device mehr angelegt.
Mit der gezeigten fhem.cfg.landroid sollte man nur die MQTT Verbindung testen, bzw. Landroid zu den eigenen Konfiguration hinzufuegen.
Damit ein Device angelegt wird, braucht man "define a autocreate".
Damit das neu angelegte Device (und fuer uns wichtiger, refresh_token) gespeichert wird: "attr global statefile ./log/fhem.save".
Damit man ein Frontend zum anschauen hat: "define WEB FHEMWEB 8083 global".
Alle drei sind Teil der ausgelieferten fhem.cfg.

Mit den erwaehnten Zeilen wird bei mir ein Device angelegt.
Sehe gerade: das von LandroidUtils.pm automatisch gesetzte readingsList war bis zum naechsten FHEM-Neustart inaktiv, d.h. die per MQTT gelieferten Device-Infos wurden nicht eingetragen.
Das habe ich jetzt gefixt.

ZitatSollte anstelle von "MQIsdp" nicht "MQTT" stehen?
"MQIsdp(3)" => MQTT Version 3.1, "MQTT(4)" => MQTT Version 3.1.1.
Kann man aendern mit der mqttVersion Attribut, offensichtlich ist das der Gegenseite aber egal.


Zitat"autocreate=no" obwohl ich autocreate auf 1 habe
"autocreate=no" zeigt die Voreinstellung bei MQTT2_Client, autocreate wird aber besser von LandroidUtils.pm erledigt.
Man kann es zwar auch aendern, das so erzeugte Devicename beinhaltet aber die MQTT-ClientId, was in diesem Fall haesslich ist.
Und wenn MQTT2_Client das Device anlegt, dann kann LandroidUtils die Ergebnisse von deviceInfo nicht (so einfach) eintragen.

frober

#637
Zitat von: rudolfkoenig am 21 April 2023, 11:20:50Mit der gezeigten fhem.cfg.landroid sollte man nur die MQTT Verbindung testen, bzw. Landroid zu den eigenen Konfiguration hinzufuegen.
Damit ein Device angelegt wird, braucht man "define a autocreate".
Damit das neu angelegte Device (und fuer uns wichtiger, refresh_token) gespeichert wird: "attr global statefile ./log/fhem.save".
Damit man ein Frontend zum anschauen hat: "define WEB FHEMWEB 8083 global".
Alle drei sind Teil der ausgelieferten fhem.cfg.
fhem.cfg.landroid betraf meinen Test mit Fhemweb und telnet, ok es war nicht alles definiert...


ZitatMit den erwaehnten Zeilen wird bei mir ein Device angelegt.
Sehe gerade: das von LandroidUtils.pm automatisch gesetzte readingsList war bis zum naechsten FHEM-Neustart inaktiv, d.h. die per MQTT gelieferten Device-Infos wurden nicht eingetragen.
Das habe ich jetzt gefixt.
Auch mit der aktuellen Version bekomme ich kein Device. Im Testsystem ist autocreate definiert, hat ja mit vorherigen Versionen auch funktioniert. Client und Device gelöscht, Neustart und von vorne angefangen mit autocreate 1. Kein Device...
Und Remo scheint das gleiche Problem zu haben...

Zitat"MQIsdp(3)" => MQTT Version 3.1, "MQTT(4)" => MQTT Version 3.1.1.
Kann man aendern mit der mqttVersion Attribut, offensichtlich ist das der Gegenseite aber egal.
MQTT Version 3.1.1. war mal in der LandroidUtil definiert, wenn es dem Sever egal ist...

Zitat
Zitat"autocreate=no" obwohl ich autocreate auf 1 habe
"autocreate=no" zeigt die Voreinstellung bei MQTT2_Client, autocreate wird aber besser von LandroidUtils.pm erledigt.
Man kann es zwar auch aendern, das so erzeugte Devicename beinhaltet aber die MQTT-ClientId, was in diesem Fall haesslich ist.
Und wenn MQTT2_Client das Device anlegt, dann kann LandroidUtils die Ergebnisse von deviceInfo nicht (so einfach) eintragen.
ok


komplett neu angelegt, nach Neustart:
define MQTT_Worx MQTT2_CLIENT xx
attr MQTT_Worx connectFn {use LandroidUtils;;Landroid_connect($NAME,"worx",1)}
attr MQTT_Worx execAfterConnect { my $h=$defs{$NAME};;MQTT2_CLIENT_doPublish($h,'PRM100/xxx/commandIn','{}')}
attr MQTT_Worx keepaliveTimeout 600
attr MQTT_Worx maxFailedConnects 20
attr MQTT_Worx nextOpenDelay 180
attr MQTT_Worx room MQTT
attr MQTT_Worx subscriptions PRM100/xxx/commandOut
attr MQTT_Worx username x@x.de
attr MQTT_Worx verbose 5
#  BUF       
#  CFGFN     
#  Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
#  ClientsKeepOrder 1
#  DEF        xx
#  DeviceName iot.eu-west-1.worxlandroid.com:443
#  FD        21
#  FUUID      64425fd1-f33f-ff70-976e-11214e11c2b777de
#  NAME      MQTT_Worx
#  NR        141
#  PARTIAL   
#  SSL        1
#  STATE      opened
#  TYPE      MQTT2_CLIENT
#  WBCallback
#  autocreate 1
#  clientId  WX/USER/....
#  devioLoglevel 5
#  eventCount 5
#  landroidType worx
#  lastMsgTime 1682071519.11238
#  mqttEndpoint iot.eu-west-1.worxlandroid.com
#  nextOpenDelay 180
#  nrConnects 2
#  userId    xxx
#  MatchList:
#    1:MQTT2_DEVICE ^.
#    2:MQTT_GENERIC_BRIDGE ^.
#  READINGS:
#    2023-04-21 12:05:18  state          opened
#    2023-04-21 12:05:18  wxid            xxxx
#  sslargs:
#    SSL_alpn_protocols mqtt
#
setstate MQTT_Worx opened
setstate MQTT_Worx 2023-04-21 12:05:17 .access_token xxx
setstate MQTT_Worx 2023-04-21 12:05:17 .expires_in 3600
setstate MQTT_Worx 2023-04-21 12:05:17 .refresh_token xxx
setstate MQTT_Worx 2023-04-21 12:05:17 .token_type Bearer
setstate MQTT_Worx 2023-04-21 12:05:18 state opened
setstate MQTT_Worx 2023-04-21 12:05:18 wxid xxx


2023.04.21 12:05:05 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2023.04.21 12:05:16 5: {"token_type":...
2023.04.21 12:05:17 4: MQTT_Worx: Got auth info, type password
2023.04.21 12:05:17 5: {"id":...
2023.04.21 12:05:17 4: MQTT_Worx: Got userId: xxx
2023.04.21 12:05:17 5: [{"id":...
2023.04.21 12:05:18 4: MQTT_Worx: Got device info
2023.04.21 12:05:18 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2023.04.21 12:05:18 5: HttpUtils url=https://iot.eu-west-1.worxlandroid.com:443/ NonBlocking via https
2023.04.21 12:05:18 4: IP: iot.eu-west-1.worxlandroid.com -> 52.17.153.4
2023.04.21 12:05:18 5: MQTT_Worx: sending CONNECT (16)(204)...
2023.04.21 12:05:18 5: DevIo_SimpleWrite MQTT_Worx: ...
2023.04.21 12:05:18 5: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.04.21 12:05:18 4: MQTT_Worx received CONNACK
2023.04.21 12:05:18 5: MQTT_Worx: received CONNACK (0)(0)
2023.04.21 12:05:18 5: MQTT_Worx: sending SUBSCRIBE (130)#(0)(21)(0)(30)PRM100/xxx/commandOut(0)
2023.04.21 12:05:18 4: MQTT_Worx received SUBACK
2023.04.21 12:05:18 5: MQTT_Worx: received SUBACK (0)(21)(0)
2023.04.21 12:05:18 5: MQTT_Worx: sending PUBLISH 0!(0)(29)PRM100/xxx/commandIn{}
2023.04.21 12:05:19 4: MQTT_Worx received PUBLISH
2023.04.21 12:05:19 5: MQTT_Worx: received PUBLISH (0)(30)PRM100/xxx/commandOut{"cfg":....
2023.04.21 12:05:19 5: MQTT_Worx: dispatch autocreate=no\000WX_USER_...
2023.04.21 12:06:11 4: MQTT_Worx received PUBLISH
2023.04.21 12:06:11 5: MQTT_Worx: received PUBLISH (0)(30)PRM100/xxx/commandOut{"cfg":...
2023.04.21 12:06:11 5: MQTT_Worx: dispatch autocreate=no\000WX_USER_...

Nachtrag:
defmod autocreate autocreate
attr autocreate autocreateThreshold .*:2:30
attr autocreate ignoreTypes CUL_WUL*|CUL_HOERMANN.*|FHT.*|CUL_WS.*

setstate autocreate active
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Ralli

Mal eine kleine Zwischenmeldung meinerseits:

Bei mir klappt diese Lösung mittlerweile seit meinem letzten Post einwandfrei - auch mit den zwischenzeitlichen Modifikationen.

Einen ganz herzliches Dankeschön an frober für die zielgerichteten Forschungen und vor allem an Rudi für seine Lösung und sein Engagement auch für nur einige wenige Nutzer! Danke!!!

... und Otto nicht zu vergessen mit seiner ursprünglichen investigativen Arbeit und seiner ersten reinen MQTT-Lösung!
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

frober

@Ralli, bezogen auf Nutzungsbreite von Fhem, dem Anteil der User die überhaupt einen Mähroboter habe und dann noch einen Worx, sehe ich das nicht als wenig. Zumal sich nicht alle melden oder bisher gemeldet haben.
Auch auf meinem Hauptsystem läuft es zuverlässig.

Auch von mir ein großes Danke an Rudi, ohne ihn wären wir nicht soweit gekommen. Und Ottos "Idee" natürlich...

@Rudi, ich habe die fhem.cfg.landroid ergänzt und bekomme auch hier kein Device angelegt.
Cfg. und debug habe ich dir per Mail gesendet.
 
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Zitat von: remo am 21 April 2023, 10:11:30
Zitat von: frober am 21 April 2023, 09:11:49
Zitat von: remo am 21 April 2023, 08:14:50State ist opened
WXID ist auch gesetzt.

Mehr Readings bekomme ich aber leider nicht ...

Du solltest ein neues MQTT2_Device bekommen haben, darin findest du die Readings.
Ansonsten wäre ein Logauszug hilfreich...


Kann ich leider nicht bestätigen...

Also autocreate funktioniert, ich hatte
attr autocreate autocreateThreshold .*:2:30
das hat mich "blockiert".

Hast du autocreate aktiv?
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

remo

ZitatHast du autocreate aktiv?

Jetzt ja. Readings hab ich nun. Auch mit vernünftigen Werten. Ob die sich auch aktualisieren teste ich morgen.

Wie funktioniert das nun mit der Steuerung?!

frober

Zitat von: remo am 21 April 2023, 21:20:28
ZitatHast du autocreate aktiv?

Jetzt ja. Readings hab ich nun. Auch mit vernünftigen Werten. Ob die sich auch aktualisieren teste ich morgen.

Wie funktioniert das nun mit der Steuerung?!

Das Template funktioniert weiterhin.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

ZitatDas Template funktioniert weiterhin.
Welches Template ist das?
Sollte LandroidUtils.pm es beim Anlegen der Mower-Device es automatisch anwenden?

frober

Zitat von: rudolfkoenig am 22 April 2023, 10:16:38
ZitatDas Template funktioniert weiterhin.
Welches Template ist das?
Sollte LandroidUtils.pm es beim Anlegen der Mower-Device es automatisch anwenden?

Wäre sinnvoll, allerdings bekommt man damit keine Mowerdaten mehr, soweit ich das gesehen habe.
Sollte diese jemand benötigen, müsste er nach konfigurieren...

"worx_landroid"
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...