MQTT2 für Worx Landroid Mähroboter

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

Vorheriges Thema - Nächstes Thema

Otto123

#90
Das funktioniert bei mir so nicht? da muss noch m:1 und p:0 dazu? So macht es zumindest das Windows Tool. dort kann man sich gut anschauen was reinkommt und wie der String zum Publish ausschauen muss.
Ich habe das mal Beispielhaft in Perl mit Arrays und Hashes gebaut - als Test für die Kommandozeile:
{
my @tmo = ("00:00",0,0);;
my @tdi = ("09:00",10,0);;
my @tmi = ("00:00",0,0);;
my @tdo = ("00:00",0,0);;
my @tfr = ("00:00",0,0);;
my @tsa = ("00:00",0,0);;
my @tso = ("00:00",0,0);;
my %hash = ('m' => 1, 'p' => 0,'sc' => {'d' => [\@tmo,\@tdi,\@tmi,\@tdo,\@tfr,\@tsa,\@tso],'dd' => [\@tmo,\@tdi,\@tmi,\@tdo,\@tfr,\@tsa,\@tso]});;
return toJSON \%hash
}

Das kann man auch als sub in die myUtils legen und in x_raw_payload mit {(AufrufSub)} übergeben
Den ersten Plan 'd' kann man getrennt setzen (dd weglassen), den zweiten 'dd' offenbar nur mit dem Ersten? Zumindest war das jetzt bei mir so.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zitat von: fred_feuerstein am 21 April 2021, 12:32:09
Ich hätte da auch nochmal eine Frage.

Thema Mähzeiten setzen.

Also einen Befehl, um alle 7 Mähzeiten auf einmal zu setzen habe ich anhand von Seite 2 hier im Thread anlegen können. setmowtimes funktioniert damit.

Aber wie kann man bspw. einzeln nur für den Montag (also cfg_sc_d_2_1 / cfg_sc_d_2_2 / cfg_sc_d_2_3) die Werte setzen?
Das nochmal beantworten:
Der Plan für die erste bzw. die erste und die zweite Mähzeit muss jeweils komplett geschrieben werden.
Eine Mähzeit für einen Tag setzen/ändern -> bedeutet existierende auslesen, eine ändern, alle zurückschreiben.

Mit den Daten für die Zeiten müssen wir nochmal testen, es muss eigentlich alles reinkommen, es sei denn Axel hat da noch was errechnet? Es gibt ja nur den Weg über MQTT, auch das Tool von Axel Mohnen hat ja am Ende über MQTT mit der Cloud gesprochen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

fred_feuerstein

#92
Das ist ja genau das was ich auch nicht verstehe. Es gab bei Axel ja sogar den Reset Blade Time als Set Befehl. Dieser wirkte sich dann auf den BladeTimeCounter aus, der TotalBladeTime Wert war immer der Gesamtwert und der änderte sich nicht.

Und zu den Mähzeiten. Bei mir funktioniert es so wie von mir gepostet. Also mit der als userZeiten generierten Variable kann ich das entsprechend absetzen und die Werte werden aktualisiert.
Aber ich werde mein User-Reading mal noch um m:1 und p:0 erweitern. Dann müsste es auch bei Dir funktionieren.

wäre dann also so:
userZeiten {sprintf('{"sc":{"d":[["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s]],"m":1,"p":0}}',
ReadingsVal("$name","cfg_sc_d_1_1","Unknown"), ReadingsVal("$name","cfg_sc_d_1_2","Unknown"), ReadingsVal("$name","cfg_sc_d_1_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_2_1","Unknown"), ReadingsVal("$name","cfg_sc_d_2_2","Unknown"), ReadingsVal("$name","cfg_sc_d_2_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_3_1","Unknown"), ReadingsVal("$name","cfg_sc_d_3_2","Unknown"), ReadingsVal("$name","cfg_sc_d_3_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_4_1","Unknown"), ReadingsVal("$name","cfg_sc_d_4_2","Unknown"), ReadingsVal("$name","cfg_sc_d_4_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_5_1","Unknown"), ReadingsVal("$name","cfg_sc_d_5_2","Unknown"), ReadingsVal("$name","cfg_sc_d_5_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_6_1","Unknown"), ReadingsVal("$name","cfg_sc_d_6_2","Unknown"), ReadingsVal("$name","cfg_sc_d_6_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_7_1","Unknown"), ReadingsVal("$name","cfg_sc_d_7_2","Unknown"), ReadingsVal("$name","cfg_sc_d_7_3","Unknown"),
)},

(nur zur Sicherheit. Es lag bei Dir aber nicht an dem letzten Komma beim Userreading... das ist nur, weil bei mir danach noch weitere kommen. Aber das ist klar, denke ich)

Bei SetList habe ich noch einen hinzugefügt:
resetmowtimer:noArg DB510/F0FE6B832878/commandIn {"sc":{"d":[["00:00",0,0],["00:00",0,0],["00:00",0,0],["00:00",0,0],["00:00",0,0],["00:00",0,0],["00:00",0,0]],"m":1,"p":0}}
Damit kann man auf einmal alle Timer-Einträge löschen.   

Habe jetzt alle meine DOIFs und sonstigen Steuerung vom Node-Modul auf MQTT2 umstellt. Auch die Anzeige und Steuerung über das TabletUI funktioniert nun damit :)

Einzig noch das mit dem BladeTimeCounter und der TotalBladeTime fehlt halt noch. Bzw. fehlen tut nur der BladeTimeCounter. Also der Resetbare Wert.


Edit: ich habe mir nun über das HourCounter Modul noch einen BladeTimeCounter gebaut. Da zählt jetzt ein Counter, sobald der Worx einen der entsprechenden Mähstati hat hoch. Den Wert kann ich nun als BladeTimeCounter nutzen und über das HourCounterModul auch zurücksetzen.


Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

deeb

Hallo, ich hatte Probleme mit den Verbindungsstatus in Fhem, nachdem ich meinen Landroid aus den Winterschlaf geholt habe.
Der angezeigte Status wechselte ständig (connected / disconneced).
Nachdem ich dann eine leeres Passwort für den MQTT2_CLIENT MQTT_Worx  gesetzt habe, hatte ich den endlich den gewünschten Status opened.

Otto123

Zitat von: fred_feuerstein am 21 April 2021, 15:30:16
Das ist ja genau das was ich auch nicht verstehe. Es gab bei Axel ja sogar den Reset Blade Time als Set Befehl. Dieser wirkte sich dann auf den BladeTimeCounter aus, der TotalBladeTime Wert war immer der Gesamtwert und der änderte sich nicht.
Ich habe jetzt eine Weile auf die Tools und Werte gestarrt. Ich denke der Reset ist was lokales und nicht in der Cloud / im Mäher. Also in der App, in der Desktop App, und so war es auch in FHEM ...  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

huhu

Zitat von: Otto123 am 21 April 2021, 12:38:26
Ist die Subscription richtig? Ich hatte damals aufgeschrieben MAC 12 stellig, ich zähle 13 Stellen, kann aber durchs anonymisieren passiert sein. Oben bei messageAfterConnect sind es 12 ;)
autocreate simple im MQTT2_CLIENT ist richtig! Nicht auf complex stellen!

Also das IO Device sieht gut aus. Mir scheint auch autocreate im System fehlt

@fred_feuerstein Du kannst sicher den kompletten Zeitstring bauen, ich habe es noch nicht gemacht. Wie schon gesagt, das Format wurde voriges Jahr geändert. Das Windows tool hat mir bei der Analyse etwas geholfen.

Danke für eure Antworten. Es lag wie vermutet am Autocreate, das habe ich irgendwann mal ausgestellt.
Nach dem manuellen Anlegen wie Ralli geschrieben hat, kam auch der Rest  :)

Otto123

Für die battery Readings - da hatte ich mich glaube daran gehalten https://wiki.fhem.de/wiki/DevelopmentGuidelinesReadings
Das mit dem bladeCounter werde ich ändern, der Wert ist eigentlich die totale Mähzeit - totalBladeTime

Es gibt da:
Gesamte Arbeitszeit - wt - workingtime ?
Gesamte Mähzeit - b - blade...?
Gesamte Distanz - d - distance ?
Umfang der Rasenfläche - bl - borderlength ?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

fred_feuerstein

#97
Ok. Bei battery Readings, stimmt. offiziell sollte es tatsächlich batteryPercent heissen. Das habe ich bei mir auch wieder zurück geändert. Hatte batteryLevel erstmal nur geändert, da es im Node-Modul so hiess.

Aber wegen der generellen Bennennung, wäre es gut, dass Du den ersten Buchstaben immer klein setzt. Das ist bei allen der Fall, nur nicht bei "serialNumber". Da hast Du "SerialNumber" genutzt. Das könntest Du also noch ändern. Dann wäre es überall gleich mit kleinen Buchstaben zu Beginn des Readingnamens.

Die Änderung von BladeTimeCounter auf totalBladeTime habe ich bei mir schon drin.
Den BladeTimeCounter habe ich mir über das HourCounter Modul nachgebaut und als Reading im MQTT-Device.

ZitatUmfang der Rasenfläche - bl - borderlength ?
hm. das Reading habe ich gar nicht. Finde nirgends eins mit "bl".

Ansonsten habe ich folgende User-Readings noch zusätzlich angelegt:


cfg_sc_d_1_3Txt:cfg_sc_d_1_3.* {ReadingsVal($name,"cfg_sc_d_1_3","0") ? "ja" : "nein"},
cfg_sc_d_2_3Txt:cfg_sc_d_2_3.* {ReadingsVal($name,"cfg_sc_d_2_3","0") ? "ja" : "nein"},
cfg_sc_d_3_3Txt:cfg_sc_d_3_3.* {ReadingsVal($name,"cfg_sc_d_3_3","0") ? "ja" : "nein"},
cfg_sc_d_4_3Txt:cfg_sc_d_4_3.* {ReadingsVal($name,"cfg_sc_d_4_3","0") ? "ja" : "nein"},
cfg_sc_d_5_3Txt:cfg_sc_d_5_3.* {ReadingsVal($name,"cfg_sc_d_5_3","0") ? "ja" : "nein"},
cfg_sc_d_6_3Txt:cfg_sc_d_6_3.* {ReadingsVal($name,"cfg_sc_d_6_3","0") ? "ja" : "nein"},
cfg_sc_d_7_3Txt:cfg_sc_d_7_3.* {ReadingsVal($name,"cfg_sc_d_7_3","0") ? "ja" : "nein"},
batteryChargingTxt:batteryCharging.* {ReadingsVal($name,"batteryCharging","0") ? "ja" : "nein"},
userstate {sprintf("%s - %d%%", ReadingsVal("$name","mowerStatusTxt","Unknown"), ReadingsVal("$name","batteryLevel",0))},
userGesamtstrecke {sprintf('%.02F', ReadingsVal("$name","totalDistance","0")/1000)},
userGesamtmaehzeit {sprintf('%.02F', ReadingsVal("$name","totalBladeTime","0")/60)},
userMaehzeitAktMonat {sprintf('%.02F', ReadingsVal("ShaunDasSchaf_Count","userLaufzeitMonat","0"))},
userGesamtzeit {sprintf('%.02F', ReadingsVal("$name","totalTime","0")/60)},
userZeiten {sprintf('{"sc":{"d":[["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s],["%s",%s,%s]],"m":1,"p":0}}',
ReadingsVal("$name","cfg_sc_d_1_1","Unknown"), ReadingsVal("$name","cfg_sc_d_1_2","Unknown"), ReadingsVal("$name","cfg_sc_d_1_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_2_1","Unknown"), ReadingsVal("$name","cfg_sc_d_2_2","Unknown"), ReadingsVal("$name","cfg_sc_d_2_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_3_1","Unknown"), ReadingsVal("$name","cfg_sc_d_3_2","Unknown"), ReadingsVal("$name","cfg_sc_d_3_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_4_1","Unknown"), ReadingsVal("$name","cfg_sc_d_4_2","Unknown"), ReadingsVal("$name","cfg_sc_d_4_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_5_1","Unknown"), ReadingsVal("$name","cfg_sc_d_5_2","Unknown"), ReadingsVal("$name","cfg_sc_d_5_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_6_1","Unknown"), ReadingsVal("$name","cfg_sc_d_6_2","Unknown"), ReadingsVal("$name","cfg_sc_d_6_3","Unknown"),
ReadingsVal("$name","cfg_sc_d_7_1","Unknown"), ReadingsVal("$name","cfg_sc_d_7_2","Unknown"), ReadingsVal("$name","cfg_sc_d_7_3","Unknown"),
)},


Bei den total-Readings habe ich also eine Umformatierung auf Stunden, bzw. Kilometer. Ist in der Tablet-UI besser lesbar.
Ausserdem noch ein paar weitere Textwerte statt 0 und 1. Auch zur besseren Anzeige-Möglichkeit. Hatte hier erst mit ReadingsChange gearbeitet. Aber das war suboptimal.




Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

Otto123

Moin,
Zitat von: fred_feuerstein am 22 April 2021, 08:57:55
das Reading habe ich gar nicht. Finde nirgends eins mit "bl".
echt? Sollte als dat_st_bl benannt sein. In der App findet man das bei der Rasenfläche als Perimeter, sonst wäre ich nicht drauf gekommen :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

fred_feuerstein

nein. das Reading habe ich nicht. Könnte evtl. daran liegen, dass ich einen älteren Worx aus 2018 habe. In der App ist das Feld Perimeter auch nicht gefüllt.
Hatte damals auch die Rasenfläche manuell eingetragen. Da gab es den Rasenflächenrechner noch nicht. Keine Ahnung wie der funktioniert ;) Gerade das erste Mal auf den Rechner geklickt. Er möchte da die Kamera einschalten. Muss mal schauen, was die App dann machen möchte...
Also entweder liegt es daran oder tatsächlich am älteren Worx Robo.
Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

EinEinfach

Zitat@EinEinfach Ich denke da stimmt noch etwas mit dem MQTT2_CLIENT Device nicht.

Ich habe heute alle Schritte von Anang an abgearbeitet und siehe da, es läuft.

Danke und Gruß
Alexander
fhem auf Intel NUC6CAYH mit Proxmox im LXC (Debian 10), KNX mit knxd über MDT SCN-IP000.02, Buderus GB192-15i über KM100, Solaredge WR SE9K über Modbus-TCP

kjmEjfu

Vielleicht nochmal als Hinweis, weil ich gestern selber reingerannt bin.

Wenn die connect-disconnect-Schleife los geht, dann in der Handy-App probieren, ob die noch aktualisiert bzw. sich der Worx darüber noch steuern lässt. Das wird vermutlich nicht der Fall sein. Dann wurde das von Worx als Hacking-Versuch (o.ä.) eingestuft und der MQTT-Zugang gesperrt. Es reicht dann 24h zu warten, auch wenn es nervt.
Alternativ kann man den Worx vom aktuellen Account unpairen und an neue Mailadresse pairen, aber nicht jeder hat darauf Lust.
Migriere derzeit zu Home Assistant

fred_feuerstein

bei meinem 2018er Worx funktioniert ja seit Firmware 3.52 der Befehl zum BorderCut nicht mehr. Er reagiert da einfach nicht drauf.
Hatte aber auch bevor es diese Funktion gab schon eine manuell Funktion dazu in Betrieb.
Ich setze einen Dummy (Shaun_HomeBorderCut) auf "on". Darauf triggert dann ein Doif:


([Shaun_HomeBorderCut:state] eq "on" and ([ShaunDasSchaf:mowerStatusTxt] eq "Home" or [ShaunDasSchaf:mowerStatusTxt] eq "Idle")
(set ShaunDasSchaf startMower)
(set ShaunDasSchaf pauseMower)
(set ShaunDasSchaf stopMower)
(set Shaun_HomeBorderCut off)


Wichtig sind dann die Attribute:
wait      0,4,2,30
do        always


damit klappt der Bordercut perfekt. Ergentlich macht die Funktion bei Worx ja auch nix anderes.
Hatte auch früher damit funktioniert.

Naja. Muss man sich halt nur zu helfen wissen :)
Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

clumsy

Hallo

Erstmal vielen Dank, das Modul läuft problemlos mit meinem WR141E!!

Zitat von: Otto123 am 01 Juli 2020, 21:38:15
- Party modus für xx minuten

Nach dem Update die Templates neu initialisieren:

Evtl. könnte man das Template noch erweitern, dass "mowerActive" den entsprechenden Status auch anzeigt, dazu muss das userReading angepasst werden:
userReadings mowerActive:mowerActiveIndex.* {my %activeState = (
0 => "No",
1 => "Yes",
2 => "Party"
); $activeState{ReadingsVal($name,"mowerActiveIndex","0")}},
....


LG STefan

Otto123

Ich habe ein paar Anpassungen im Template gemacht
Änderungen Ergänzung:
serialNumber
dat_st_b:totalBladeTime ... dat_st_bl:borderLength

{my %activeState = (
0 => "No",
1 => "Yes",
2 => "Party"
); $activeState{ReadingsVal($name,"mowerActiveIndex","0")}},

Danke für die Hinweise.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz