MQTT2 für Worx Landroid Mähroboter

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

Vorheriges Thema - Nächstes Thema

FosCo

#300
Hi Otto123,

da ja sonst meist nur gefragt und gemeckert wird, den Daumen hoch gibt's natürlich auch, aber nochmal so: DANKE!

Funzt auf Anhieb und ist genau das, was ich brauche.
Deutlich flexibler als ein ständig nachzupflegendes Modul!

Analog zu den hier (https://github.com/iobroker-community-adapters/ioBroker.worx/blob/65ecc586cc16b187fb3cb71f7fb3238503fc2989/main.js) gelisteten cmds und states, macht es vielleicht Sinn, diese mit aufzunehmen.
cmd=9 (SAFE HOMING=Rückfahrt ohne Messer) werde ich z.B. immer brauchen, wenn ich mit den Kindern rausgehe ;)

Wie kann ich einen pull Request auf das Template machen?

Erros, States & CMD are these:
const ERRORCODES = {
    0: 'No error',
    1: 'Trapped',
    2: 'Lifted',
    3: 'Wire missing',
    4: 'Outside wire',
    5: 'Raining',
    6: 'Close door to mow',
    7: 'Close door to go home',
    8: 'Blade motor blocked',
    9: 'Wheel motor blocked',
    10: 'Trapped timeout',
    11: 'Upside down',
    12: 'Battery low',
    13: 'Reverse wire',
    14: 'Charge error',
    15: 'Timeout finding home',
    16: 'Mower locked',
    17: 'Battery over temperature',
    18: 'dummy model',
    19: 'Battery trunk open timeout',
    20: 'wire sync',
    21: 'msg num'
};
const STATUSCODES = {
    0: 'IDLE',
    1: 'Home',
    2: 'Start sequence',
    3: 'Leaving home',
    4: 'Follow wire',
    5: 'Searching home',
    6: 'Searching wire',
    7: 'Mowing',
    8: 'Lifted',
    9: 'Trapped',
    10: 'Blade blocked',
    11: 'Debug',
    12: 'Remote control',
    13: 'escape from off limits',
    30: 'Going home',
    31: 'Zone training',
    32: 'Border Cut',
    33: 'Searching zone',
    34: 'Pause'
};
const COMMANDCODES = {
    1: 'Start',
    2: 'Stop',
    3: 'Home',
    4: 'Start Zone Taining',
    5: 'Lock',
    6: 'Unlock',
    7: 'Restart Robot',
    8: 'pause when follow wire',
    9: 'safe homing'
};


Edit:
userReadings ist dann folgendermaßen angepasst:
mowerActive:mowerActiveIndex:.* {my %activeState = (
0 => "No",
1 => "Yes",
2 => "Party"
); $activeState{ReadingsVal($name,"mowerActiveIndex","0")}},
mowerStatusTxt:mowerStatusIndex.* {my %stateCodes = (
0 => "Idle",
1 => "Home",
2 => "Start sequence",
3 => "Leaving home",
4 => "Follow wire",
5 => "Searching home",
6 => "Searching wire",
7 => "Mowing",
8 => "Lifted",
9 => "Trapped",
10 => "Blade blocked",
11 => "Debug",
12 => "Remote control",
13 => "escape from off limits",
30 => "Going home",
31 => "Zone Training",
32 => "Edge cutting",
33 => "Searching zone",
34 => "Pause"
); $stateCodes{ReadingsVal($name,"mowerStatusIndex","0")}},
mowerErrorTxt:mowerErrorIndex.* { my %errorCodes = (
0 => "No error",
1 => "Trapped",
2 => "Lifted",
3 => "Wire missing",
4 => "Outside wire",
5 => "Raining",
6 => "Close door to mow",
7 => "Close door to go home",
8 => "Blade motor blocked",
9 => "Wheel motor blocked",
10 => "Trapped timeout",
11 => "Upside down",
12 => "Battery low",
13 => "Reverse wire",
14 => "Charge error",
15 => "Timeout finding home",
16 => "Mower locked",
17 => "Battery temp out of range",
18 => "dummy model",
19 => "Battery trunk open timeout",
20 => "wire sync",
21 => "msg num"
); $errorCodes{ReadingsVal($name,"mowerErrorIndex","0")}}


Bei den Commands bin ich mit "Pause/Stop" im Gegensatz zu "Stop/Home" etwas durcheinandergekommen, da es auch einen "Pause when follow wire" zu geben scheint. Ich habe mir daher erlaubt, die Bezeichnungen anzugleichen, ich lasse mich da natürlich auch gerne überstimmen ;)

Achtung: cmd=9 geht wohl erst mit FW 3.25!

mowerRainDelay:slider,0,30,1440 $DEVICETOPIC/commandIn {"rd":$EVTPART1}
  mowerTimeCorrection:slider,-100,1,100 $DEVICETOPIC/commandIn {"sc":{"p":$EVTPART1}}
  startBorderCut:noArg $DEVICETOPIC/commandIn {"sc":{"ots":{"bc":1,"wtm":0}}}
  startOneTime:slider,10,10,720 $DEVICETOPIC/commandIn {"sc":{"ots":{"bc":0,"wtm":$EVTPART1}}}
  startMower:noArg $DEVICETOPIC/commandIn {"cmd":1}
  stopMower:noArg $DEVICETOPIC/commandIn {"cmd":2}
  sendMowerHome:noArg $DEVICETOPIC/commandIn {"cmd":3}
  startZoneTraining:noArg $DEVICETOPIC/commandIn {"cmd":4}
  lockMower:noArg $DEVICETOPIC/commandIn {"cmd":5}
  unlockMower:noArg $DEVICETOPIC/commandIn {"cmd":6}
  restartMower:noArg $DEVICETOPIC/commandIn {"cmd":7}
  pauseFollowWire:noArg $DEVICETOPIC/commandIn {"cmd":8}
  sendMowerHomeWithoutKnives:noArg $DEVICETOPIC/commandIn {"cmd":9}
  PartyTime:slider,0,10,2880 $DEVICETOPIC/commandIn {"sc":{"distm":$EVTPART1}}
  PartyMode:on,off { my %hash = ( 'on' => 2, 'off' => 1);qq($DEVICETOPIC/commandIn {"sc":{"m":$hash{$EVTPART1}}})}
  x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq($DEVICETOPIC/commandIn $payload)}


Danke und Grüße
Jonas

Otto123

Hallo Jonas,

ZitatWie kann ich einen pull Request auf das Template machen?
Naja eigentlich nur so wie Du es hier gemacht hast :)
ZitatDeutlich flexibler als ein ständig nachzupflegendes Modul!
Finde ich auch! Und da reiche ich den Dank weiter an die Macher der MQTT2* und AttrTemplate Infrastruktur!👏👏👏

Ich installiere mir die neue Firmware, schau es mir an und baue es dann ins Template.

Danke für die Info und Zuarbeit.

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

FosCo

Danke, dann hab ich ja alles richtig gemacht.

Testen kann ich es leider noch nicht, der Mäher steht aktuell noch neben dem Schreibtisch :D

Otto123

getestet: das funktioniert. Er akzeptiert per x_raw_payload {"cmd":9} und ich höre keine Messer laufen.

Auch mal wieder eine Funktion, die es per App gar nicht gibt?

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

FosCo

#304
So wurde es bei iobroker im Forum beschrieben 😉

Edit: Aber auch brandneu ab der 3.25, Link finde ich leider grade nicht, selbst das zweite Mal googlen war heute schwer, ein Hoch auf GitHub.

Da der Landi grade das neuste Spielzeug ist (danach folgt die Inbetriebnahme des opensprinkler), halte ich das Ohr aktuell an iobroker und Roboter Forum.

Viele Grüße und einen schönen Abend,
Jonas


FosCo

Genial, funktioniert perfekt mit temporärem Lautsprecher Kabel durch den halben Garten 😀

remo

#306
Guten Abend,

schön zu sehen, dass es hierzu immerwieder Neuigkeiten gibt.
Bisher läuft bei mir auch alles tadellos.

Reicht es aus für das neue Template von Otto FHEM zu updaten und das Template neu auszuwählen?


Noch etwas zum Thema Regenverzögerung:

Das Reading dat_rain_s wechselt zwischen 1 und 0 bei Regen und !Regen.
Hat man einen externen Regensensor und der Landroid steht in einer Garage, könnte man dann das Reading nicht entsprechend abhängig vom externen Regensensor setzen?

Also soetwas wie:

notify Regensensor.on -> set Landroid dat_rain_s 1

Oder präziser:

Lässt sich dieses Reading gezielt (manuell oder automatisch) manipulieren, sodass der Landroid das mitbekommt und automatisch in die Regenverzögerung geht?

Ich schreibe lieber ein paar Zeilen Code, statt ein Loch in die Garage zu bohren  :)


Schönen Abend.

Otto123

#307
Hi remo,

einfach ins Reading schreiben bringt nichts. Man müsste dann den Wert schon per mqtt zum Mower übertragen. Aber es würde mich wundern wenn er das zulässt. Es ist immerhin ein Wert vom internen Sensor, den würd ich mir nicht von außen manipulieren lassen.
Aber Du kannst ja die interne Regenverzögerung ausschalten und den Mower für die Zeit des Regens in die Party Pause schicken?

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

remo

#308
Hallo Otto.

Dankeschön für deine Antwort.
Das habe ich mir schon fast gedacht.
Wäre auch zu einfach gewesen.

Du meinst sicherlich den Party-Modus?!
So habe ich es bisher auch getan:
if Regen: stopMower + PartyMode on
if !Regen: PartyMode off (+ startMower)

Bringt aber leider auch einen Nachteil:
Wenn der Party-Modus zuvor von Hand aktiviert wurde, deaktiviert dieser sich wieder wenn irgendwann ein Regen vorbei  ist. Angenommen ich schicke den Landroid für eine Woche in den Party-Modus. Nach zwei Tagen regnet es für einen Tag, dann ist am dritten Tag der Party-Modus wieder deaktiviert..


dat_rain_cnt

Zeigt übrigens die Restzeit für die Regenverzögerung in Minuten an.
Aber dieses Reading ist wahrscheinlich auch read-only?!

Sonst könnte man bei Regen den cfg_rd auslesen und entsprechend in dat_rain_cnt setzten...


EDIT:
Vielleicht ist mowerTimeCorrection ein Ansatz...

frober

Zitat von: remo am 28 Juli 2021, 22:15:08
Hallo Otto.

Dankeschön für deine Antwort.
Das habe ich mir schon fast gedacht.
Wäre auch zu einfach gewesen.

Du meinst sicherlich den Party-Modus?!
So habe ich es bisher auch getan:
if Regen: stopMower + PartyMode on
if !Regen: PartyMode off (+ startMower)

Bringt aber leider auch einen Nachteil:
Wenn der Party-Modus zuvor von Hand aktiviert wurde, deaktiviert dieser sich wieder wenn irgendwann ein Regen vorbei  ist. Angenommen ich schicke den Landroid für eine Woche in den Party-Modus. Nach zwei Tagen regnet es für einen Tag, dann ist am dritten Tag der Party-Modus wieder deaktiviert..


dat_rain_cnt

Zeigt übrigens die Restzeit für die Regenverzögerung in Minuten an.
Aber dieses Reading ist wahrscheinlich auch read-only?!

Sonst könnte man bei Regen den cfg_rd auslesen und entsprechend in dat_rain_cnt setzten...


EDIT:
Vielleicht ist mowerTimeCorrection ein Ansatz...

Das kannst du doch "abfangen"...

Als Bsp. in deiner Kurzschreibweise...
Dummy d_PartyMode on/off
notify d_PartyMode.on set Mower PartyMode
if !Regen & !d_PartyMode: PartyMode off (+ startMower)



Raspi 3b mit Raspbian Buster 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...

hanswerner1

Zitat von: remo am 28 Juli 2021, 22:15:08

EDIT:
Vielleicht ist mowerTimeCorrection ein Ansatz...

Ich mache das mit dem externen Regensensor über mowerTimeCorrection und das funtioniert gut.


([ESPEasy_WeMos_02_wetter:Regen_Landroid] eq "on")
(set Worx_Landroid_M500 mowerTimeCorrection -100)

DOELSEIF
([ESPEasy_WeMos_02_wetter:Regen_Landroid] eq "off")
(set Worx_Landroid_M500 mowerTimeCorrection 0)


Im Regensensor habe ich bei "off" eine 2h Zeitverzögerung damit der Rasen auch abtrocknen kann.


Otto123

Zitat von: remo am 28 Juli 2021, 21:23:56
Reicht es aus für das neue Template von Otto FHEM zu updaten und das Template neu auszuwählen?
Hatt ich vergessen: ich habe noch kein neues Template gemacht.
Das mit dem Template updaten ist so eine Sache:
Das Template macht eine Grundeinrichtung. Jede persönliche Anpassung und uU auch Readings gehen bei einer erneuten Anwendung verloren. So ein Template ist mMn nicht unbedingt update geeignet.

Ich würde immer schauen und normalerweise die Neuigkeit/Anpassung im Device per Hand nachpflegen.

Ansonsten kann man aber die Templates unabhängig vom FHEM update holen.
Ich versuche bei meinen Templates die eine Utils Datei im Hintergrund haben, die Updates und Bugfixes in die Utils Datei zu verlegen. Die Datei müsste man in jedem Fall direkt holen, weil der contrib Ordner durchs FHEM update nicht aktualisiert wird.
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

remo

#312
@hanswerner1:
So dachte ich mir das auch.
Habe auch einen ESPEasy.
Werde da mal etwas basteln und würde gerne noch die interne Verzögerung mit einfließen lassen, bevor die Time Correction wieder zurück gesetzt wird.
Ich mach mich mal ran wenn die Zeit (irgendwann) mal wieder etwas lockerer sitzt  ;)

@Otto:
Stimmt. Hab es von Hand eingepflegt. Hat keine 5 Minuten gedauert. Alles sauber.
Und ohne Messer nach Hause schicken klappt super.
Vielen Dank für dein tolles Template übrigens  :-*

Gruß
remo

frober

Kann es sein, dass der MQTT2-Server/Device um die 150x am Tag den AWS-Server kontaktiert?

Ich habe wieder Probleme, dass Fhem und die App bzgl. Mähzone nicht synchron sind und das Kantenmähen wird wieder nicht mehr angezeigt.

Laut Support kontaktiert meine "Fremdsoftware" um die 150x den Server und ab 150 gibt es eine 24h Sperre.

Den Broker hatte ich nie installiert....
Raspi 3b mit Raspbian Buster 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...

Otto123

Hi,

der MQTT2 Server spielt keine Rolle, die Verbindung macht ja der MQTT2_Client :)

Ich weiß nicht was mit kontaktieren gemeint ist, der Verbindungsaufbau wird ja im LogFile geloggt. Bei mir ist das ca. einer am Tag. Ansonsten dürften ja die meisten MQTT Nachrichten vom Mäher kommen.

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