Hallo zusammen,
auf meinem Ubuntu Server läuft seit Jahren FHEM stabil mit diversen CULs, JeeLinks, Xiaomi BTLE Satelliten usw. Jetzt würde ich gern meinen neuen Landroid-S von worx in Fhem einbinden. Bisher habe ich allerdings nur den Umweg über IOBroker gefunden.
Meine Frage, geht es auch ohne den IOBroker (IOB)?
Denn, da eigentlich alles gut ohne IOB läuft würde ich die Installation gern vermeiden, da ich befürchte das das vielleicht meine bestehenden Anbindungen durcheinander bringt.
Hallo iceman,
vielleicht funktioniert das hier für Dich:
https://github.com/axelmohnen/fhem-landroid-s
Nach meinem Verständnis wird "nur" der IOBroker Adapter verwendet, aber keine IOBroker Instanz.
Benötigt wohl die Wolke.
Link ist aus dem Faden
https://forum.fhem.de/index.php/topic,55053.60.html
Hallo zusammen,
ich hab mir eine Lösung gebastelt ohne zusätzliche Module oder Server. Fhem baut dazu eine verschlüsselte MQTT Verbindung zur Worx Cloud (Amazon Server) auf.
Model: Worx Landroid M700 (WR142E) 2019
Vorarbeit ist die DeskApp von Eisha aus dem roboter-forum runterladen und mit dem Mäher zum laufen bringen
Quelle: https://www.roboter-forum.com/index.php?thread/22795-entwicklungsprojekt-worx-landroid-kress-mission-desktop-app/
Erster Schritt ist das AWS.p12 Zertifikat (im Verzeichniss von der DeskApp) in eine .cer und .key Datei mit Openssl zu zuerlegen.
openssl.exe pkcs12 -in AWS.p12 -out aws.cer -clcerts -nokeys -passin stdin
openssl.exe pkcs12 -in AWS.p12 -out aws.key -nocerts -nodes -passin stdin
Diese beiden Datein dann in Fhem Verzeichniss legen /opt/fhem
Quelle: https://www.roboter-forum.com/index.php?thread/41158-landroid-%C3%BCber-eine-mosquitto-mqtt-bridge-steuern-am-besipiel-von-openhab/&pageNo=1
Zweiter Schritt ist eine verschlüsselte MQTT Verbindung zum Amazon IOT Server aufbauen.
<AWS-Server:Port> = Amazon IOT Server, Port 8883
<UUID> = neue UUIDv1 generieren https://www.uuidgenerator.net/
<Board-ID> = Kennung der Hauptplatione
Jahr | Model | Board-ID |
2019 | WR142E | PRM100 |
2019 | WR130E | PRM100 |
--- | M800i | DB504 |
--- | --- | DB510 |
(Bitte um Infos hier für andere Modelle)
<MAC-Adresse> = Mac Adresse vom Roboter AABBCCDDEEFF
defmod MQTT_Worx MQTT2_CLIENT <AWS-Server:Port>
attr MQTT_Worx SSL 1
attr MQTT_Worx autocreate no
attr MQTT_Worx clientId android-<UUID>
attr MQTT_Worx keepaliveTimeout 600
attr MQTT_Worx mqttVersion 3.1.1
attr MQTT_Worx msgAfterConnect <Board-ID>/<MAC-Adresse>/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 <Board-ID>/<MAC-Adresse>/commandOut
Dritter Schritt anlegen des eigentlichen Roboter Device:
wieder Board Id und Mac Adresse im Mqtt Topic anpassen:
<Board-ID> = Kennung der Hauptplatione (WR142R = PRM100) (Bitte um Infos hier für andere Modelle)
<MAC-Adresse> = Mac Adresse vom Roboter AABBCCDDEEFF
defmod MQTT_Landroid MQTT2_DEVICE
attr MQTT_Landroid IODev MQTT_Worx
attr MQTT_Landroid jsonMap dat_rsi:dat_rssi\
dat_fw:firmware_version\
cfg_tm:update_time\
cfg_dt:update_date\
dat_bt_t:battery_temperature\
dat_bt_v:battery_voltage\
dat_bt_p:battery_percent\
cfg_sc_d_1_1:plan_6_start\
cfg_sc_d_1_2:plan_6_min\
cfg_sc_d_1_3:plan_6_border\
cfg_sc_d_2_1:plan_0_start\
cfg_sc_d_2_2:plan_0_min\
cfg_sc_d_2_3:plan_0_border\
cfg_sc_d_3_1:plan_1_start\
cfg_sc_d_3_2:plan_1_min\
cfg_sc_d_3_3:plan_1_border\
cfg_sc_d_4_1:plan_2_start\
cfg_sc_d_4_2:plan_2_min\
cfg_sc_d_4_3:plan_2_border\
cfg_sc_d_5_1:plan_3_start\
cfg_sc_d_5_2:plan_3_min\
cfg_sc_d_5_3:plan_3_border\
cfg_sc_d_6_1:plan_4_start\
cfg_sc_d_6_2:plan_4_min\
cfg_sc_d_6_3:plan_4_border\
cfg_sc_d_7_1:plan_5_start\
cfg_sc_d_7_2:plan_5_min\
cfg_sc_d_7_3:plan_5_border
attr MQTT_Landroid readingList <Board-ID>/<MAC-Adresse>/commandOut:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr MQTT_Landroid room Mähroboter
So läuft das erstmal bei mir, mal schauen wie lange.
Bei der SetList brauch ich dann die Hilfe vom Forum, weil ich da weniger Erfahrung habe.
Viel Spass beim basteln.
Mein MaxMaeher ist ein Worx Landroid S300 (WR130E) Mähroboter.
Letztes Jahr vorm Winterschlaf hat alles noch funktioniert, jetzt im Frühjahr ging über fhem nix mehr, über die App nur per Provider. Aber das Problem haben ja einige hier und so habe ich mich an die Anleitungen gehalten und alles samt nodejs deinstalliert, neues Konto bei Landroid angelegt usw....
Kaum macht man es richtig, geht es!
Aber was für ne show....drei Tage Arbeit.
Aber zum Thema Board...
Auch der Worx Landroid S300 (WR130E) meldet lt. Landroid DeskApp V0.0.22 ein Board names PRM100
Dies zur Info und viel Spaß beim Gras wachsen zugucken.
8)
Vielen Dank mrixs für den Tipp.
Das hat schonmal funktioniert. Ich empfange die Readings meines Landroid vom AWS-MQTT Server.
Das war eigentlich noch viel einfacher, als der Weg über IOBroker, oder das npm-Modul.
Jetzt sollten wir noch eine schöne, vollständige FHEM-definition finden.
Mir sind noch ein paar Readings nicht klar und auch das Ansteuern / Senden fehlt noch.
Auf welchem Topic muss as erfolgen?
Gibt es eine einfache Möglichkeit den Errorcode und Statuscode in den entsprechenden Text zu mappen?
Mir fällt dazu bisher nur ein Userreading ein.
Hier meine bisherige Definition:
defmod MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 MQTT2_DEVICE android_096c7b3a_c822_4145_8408_5ab72eaa5b12
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 IODev MQTT_Worx
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 alias Shaun
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 icon scene_robo_lawnmower
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 jsonMap dat_rsi:wifi\
dat_fw:firmware\
dat_mac:mac_address\
dat_le:errrorcode\
dat_ls:statuscode\
dat_lk:lockstate\
dat_st_wt:total_time\
dat_st_d:total_distance\
dat_st_b:blade_time\
cfg_sn:serialnumber\
cfg_tm:last_update_time\
cfg_dt:last_update_date\
cfg_rd:rain_delay\
dat_bt_t:battery_temperature\
dat_bt_v:battery_voltage\
dat_bt_p:battery_percent\
dat_bt_nr:battery_loadcycles\
cfg_sc_d_1_1:Sun_start\
cfg_sc_d_1_2:Sun_min\
cfg_sc_d_1_3:Sun_border\
cfg_sc_d_2_1:Mon_start\
cfg_sc_d_2_2:Mon_min\
cfg_sc_d_2_3:Mon_border\
cfg_sc_d_3_1:Tue_start\
cfg_sc_d_3_2:Tue_min\
cfg_sc_d_3_3:Tue_border\
cfg_sc_d_4_1:Wed_start\
cfg_sc_d_4_2:Wed_min\
cfg_sc_d_4_3:Wed_border\
cfg_sc_d_5_1:Thu_start\
cfg_sc_d_5_2:Thu_min\
cfg_sc_d_5_3:Thu_border\
cfg_sc_d_6_1:Fri_start\
cfg_sc_d_6_2:Fri_min\
cfg_sc_d_6_3:Fri_border\
cfg_sc_d_7_1:Sat_start\
cfg_sc_d_7_2:Sat_min\
cfg_sc_d_7_3:Sat_border\
cfg_sc_p:correction
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 readingList android_096c7b3a_c822_4145_8408_5ab72eaa5b12:DB510/F0FE6B415C26/commandOut:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr MQTT2_android_096c7b3a_c822_4145_8408_5ab72eaa5b12 room Garten,MQTT2_DEVICE
Geht die Variante auch mit einem Model WR106SI?
Gruß
eurofinder
Den habe ich.
@Papaloewe:
Ah, OK. Dann werde ich das auch mal ausprobieren, ob ich den wieder zum Laufen bekomme:-)
Gruß und danke für die Rückmeldung
eurofinder
Zitat von: mrixs am 03 April 2020, 19:03:39
Hallo zusammen,
ich hab mir eine Lösung gebastelt ohne zusätzliche Module oder Server. Fhem baut dazu eine verschlüsselte MQTT Verbindung zur Worx Cloud (Amazon Server) auf.
Model: Worx Landroid M700 (WR142E) 2019
Vorarbeit ist die DeskApp von Eisha aus dem roboter-forum runterladen und mit dem Mäher zum laufen bringen
Quelle: https://www.roboter-forum.com/index.php?thread/22795-entwicklungsprojekt-worx-landroid-kress-mission-desktop-app/
Erster Schritt ist das AWS.p12 Zertifikat (im Verzeichniss von der DeskApp) in eine .cer und .key Datei mit Openssl zu zuerlegen.
openssl.exe pkcs12 -in AWS.p12 -out aws.cer -clcerts -nokeys -passin stdin
openssl.exe pkcs12 -in AWS.p12 -out aws.key -nocerts -nodes -passin stdin
Diese beiden Datein dann in Fhem Verzeichniss legen /opt/fhem
Quelle: https://www.roboter-forum.com/index.php?thread/41158-landroid-%C3%BCber-eine-mosquitto-mqtt-bridge-steuern-am-besipiel-von-openhab/&pageNo=1
Zweiter Schritt ist eine verschlüsselte MQTT Verbindung zum Amazon IOT Server aufbauen.
<AWS-Server:Port> = Amazon IOT Server, Port 8883
<UUID> = neue UUIDv1 generieren https://www.uuidgenerator.net/
<Board-ID> = Kennung der Hauptplatione (WR142R, WR130E = PRM100) (Bitte um Infos hier für andere Modelle)
<MAC-Adresse> = Mac Adresse vom Roboter AABBCCDDEEFF
defmod MQTT_Worx MQTT2_CLIENT <AWS-Server:Port>
attr MQTT_Worx SSL 1
attr MQTT_Worx autocreate no
attr MQTT_Worx clientId android-<UUID>
attr MQTT_Worx keepaliveTimeout 600
attr MQTT_Worx mqttVersion 3.1.1
attr MQTT_Worx msgAfterConnect <Board-ID>/<MAC-Adresse>/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 <Board-ID>/<MAC-Adresse>/commandOut
Dritter Schritt anlegen des eigentlichen Roboter Device:
wieder Board Id und Mac Adresse im Mqtt Topic anpassen:
<Board-ID> = Kennung der Hauptplatione (WR142R = PRM100) (Bitte um Infos hier für andere Modelle)
<MAC-Adresse> = Mac Adresse vom Roboter AABBCCDDEEFF
defmod MQTT_Landroid MQTT2_DEVICE
attr MQTT_Landroid IODev MQTT_Worx
attr MQTT_Landroid jsonMap dat_rsi:dat_rssi\
dat_fw:firmware_version\
cfg_tm:update_time\
cfg_dt:update_date\
dat_bt_t:battery_temperature\
dat_bt_v:battery_voltage\
dat_bt_p:battery_percent\
cfg_sc_d_1_1:plan_6_start\
cfg_sc_d_1_2:plan_6_min\
cfg_sc_d_1_3:plan_6_border\
cfg_sc_d_2_1:plan_0_start\
cfg_sc_d_2_2:plan_0_min\
cfg_sc_d_2_3:plan_0_border\
cfg_sc_d_3_1:plan_1_start\
cfg_sc_d_3_2:plan_1_min\
cfg_sc_d_3_3:plan_1_border\
cfg_sc_d_4_1:plan_2_start\
cfg_sc_d_4_2:plan_2_min\
cfg_sc_d_4_3:plan_2_border\
cfg_sc_d_5_1:plan_3_start\
cfg_sc_d_5_2:plan_3_min\
cfg_sc_d_5_3:plan_3_border\
cfg_sc_d_6_1:plan_4_start\
cfg_sc_d_6_2:plan_4_min\
cfg_sc_d_6_3:plan_4_border\
cfg_sc_d_7_1:plan_5_start\
cfg_sc_d_7_2:plan_5_min\
cfg_sc_d_7_3:plan_5_border
attr MQTT_Landroid readingList <Board-ID>/<MAC-Adresse>/commandOut:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr MQTT_Landroid room Mähroboter
So läuft das erstmal bei mir, mal schauen wie lange.
Bei der SetList brauch ich dann die Hilfe vom Forum, weil ich da weniger Erfahrung habe.
Viel Spass beim basteln.
Also ich habe es auch mal so probiert, leider connected mein MQTT2_Client immer wieder und disconnected sofort wieder...
Zitat2020.04.14 14:33:36.420 5: MQTT_Worx: sending CONNECT (16)8(0)(4)MQTT(4)(2)(2)X(0),android-a62f1cb9-c05c-4f0f-9e23-af2e40c8ad48
2020.04.14 14:33:36.420 5: SW: 103800044d51545404020258002c616e64726f69642d61363266316362392d633035632d346630662d396532332d616632653430633861643438
2020.04.14 14:33:36.422 1: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883 reappeared (MQTT_Worx)
2020.04.14 14:33:36.463 1: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883 disconnected, waiting to reappear (MQTT_Worx)
2020.04.14 14:33:36.466 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2020.04.14 14:33:36.466 5: HttpUtils url=https://a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883/
2020.04.14 14:33:36.468 4: IP: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -> 52.51.96.203
2020.04.14 14:33:36.590 5: MQTT_Worx: sending CONNECT (16)8(0)(4)MQTT(4)(2)(2)X(0),android-a62f1cb9-c05c-4f0f-9e23-af2e40c8ad48
2020.04.14 14:33:36.590 5: SW: 103800044d51545404020258002c616e64726f69642d61363266316362392d633035632d346630662d396532332d616632653430633861643438
2020.04.14 14:33:36.592 1: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883 reappeared (MQTT_Worx)
2020.04.14 14:33:36.626 1: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883 disconnected, waiting to reappear (MQTT_Worx)
2020.04.14 14:33:36.629 5: MQTT_Worx: discarding DISCONNECT (224)(0)
2020.04.14 14:33:36.629 5: HttpUtils url=https://a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883/
2020.04.14 14:33:36.631 4: IP: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com -> 63.33.36.242
2020.04.14 14:33:36.752 5: MQTT_Worx: sending CONNECT (16)8(0)(4)MQTT(4)(2)(2)X(0),android-a62f1cb9-c05c-4f0f-9e23-af2e40c8ad48
2020.04.14 14:33:36.753 5: SW: 103800044d51545404020258002c616e64726f69642d61363266316362392d633035632d346630662d396532332d616632653430633861643438
2020.04.14 14:33:36.755 1: a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com:8883 reappeared (MQTT_Worx)
woran es liegt ? keinen schimmer....
muss man nicht noch irgendwie die email und pw mitgeben? oder reicht das zerlegte zertifikat ?
Zitat von: WumpE am 14 April 2020, 14:52:11
muss man nicht noch irgendwie die email und pw mitgeben? oder reicht das zerlegte zertifikat ?
sollte im Zertifikat hinterlegt sein.
Mit der Desktop App kannst du dich problemlos verbinden?
Zitat von: kjmEjfu am 14 April 2020, 17:47:09
sollte im Zertifikat hinterlegt sein.
Mit der Desktop App kannst du dich problemlos verbinden?
ja mit desktop app geht
EDIT:
Ach sie da, mit fhem gehts jetzt auch, ohne änderung :o
Zitat von: Papaloewe am 10 April 2020, 19:09:24
Gibt es eine einfache Möglichkeit den Errorcode und Statuscode in den entsprechenden Text zu mappen?
Mir fällt dazu bisher nur ein Userreading ein.
attr MQTT_Landroid userReadings mowerStatusTxt {\
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",\
30 => "Going home",\
31 => "Zone Training",\
32 => "Edge cutting",\
33 => "Searching zone",\
34 => "Pause"\
);;;;\
\
$stateCodes{ReadingsVal($name,"mowerStatus","0")}\
},\
mowerState {\
my $status = ReadingsVal($name,"mowerStatus","0");;;;\
my $error = ReadingsVal($name,"mowerError","0");;;;\
my $return = "";;;;\
\
if (($status eq 7 || $status eq 9) && $error eq 0) {\
$return = "true";;;;\
}else{\
$return = "false";;;;\
}\
\
$return \
},\
mowerErrorTxt {\
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"\
);;;;\
\
$errorCodes{ReadingsVal($name,"mowerError","0")}\
}
jo mit userReadings habe ich es
für alle die es interessiert, hier mal mein DEFMOD
defmod MQTT_Landroid MQTT2_DEVICE
attr MQTT_Landroid DbLogExclude .*
attr MQTT_Landroid IODev MQTT_Worx
attr MQTT_Landroid jsonMap dat_rsi:announceWifiQuality\
dat_fw:announceFirmware\
dat_mac:announceMacAddress\
cfg_sn:announceSerialNumber\
cfg_tm:lastUpdateTime\
cfg_dt:lastUpdateDate\
dat_dmp_1:directionPitch\
dat_dmp_2:directionRoll\
dat_dmp_3:directionYaw\
dat_bt_t:batteryTemperature\
dat_bt_v:batteryVoltage\
dat_bt_p:batteryLevel\
dat_bt_nr:batteryChargeCycle\
dat_bt_c:batteryCharging\
dat_st_b:totalBladeTime\
dat_st_d:totalDistance\
dat_st_wt:totalTime\
dat_le:mowerErrorIndex\
dat_ls:mowerStatusIndex\
dat_lk:mowerLockState\
cfg_rd:mowerRainDelay\
cfg_sc_m:mowerActiveIndex\
cfg_sc_p:mowerTimeCorrection\
cfg_mz_1:areasArea1\
cfg_mz_2:areasArea2\
cfg_mz_3:areasArea3\
cfg_mz_4:areasArea4\
cfg_mzv_1:areasAreaAct1\
cfg_mzv_2:areasAreaAct2\
cfg_mzv_3:areasAreaAct3\
cfg_mzv_4:areasAreaAct4\
cfg_mzv_5:areasAreaAct5\
cfg_mzv_6:areasAreaAct6\
cfg_mzv_7:areasAreaAct7\
cfg_mzv_8:areasAreaAct8\
cfg_mzv_9:areasAreaAct9\
dat_lz:areasAreaActIndex\
cfg_sc_d_1_1:calendarWeekday0StartTime\
cfg_sc_d_1_2:calendarWeekday0WorkTime\
cfg_sc_d_1_3:calendarWeekday0BorderCut\
cfg_sc_d_2_1:calendarWeekday1StartTime\
cfg_sc_d_2_2:calendarWeekday1WorkTime\
cfg_sc_d_2_3:calendarWeekday1BorderCut\
cfg_sc_d_3_1:calendarWeekday2StartTime\
cfg_sc_d_3_2:calendarWeekday2WorkTime\
cfg_sc_d_3_3:calendarWeekday2BorderCut\
cfg_sc_d_4_1:calendarWeekday3StartTime\
cfg_sc_d_4_2:calendarWeekday3WorkTime\
cfg_sc_d_4_3:calendarWeekday3BorderCut\
cfg_sc_d_5_1:calendarWeekday4StartTime\
cfg_sc_d_5_2:calendarWeekday4WorkTime\
cfg_sc_d_5_3:calendarWeekday4BorderCut\
cfg_sc_d_6_1:calendarWeekday5StartTime\
cfg_sc_d_6_2:calendarWeekday5WorkTime\
cfg_sc_d_6_3:calendarWeekday5BorderCut\
cfg_sc_d_7_1:calendarWeekday6StartTime\
cfg_sc_d_7_2:calendarWeekday6WorkTime\
cfg_sc_d_7_3:calendarWeekday6BorderCut
attr MQTT_Landroid readingList DB510/F0FEAAAAAAAA/commandOut:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr MQTT_Landroid setList mowerRainDelay:slider,0,30,1440 DB510/F0FEAAAAAAAA/commandIn {"rd":$EVTPART1}\
mowerTimeCorrection:slider,-100,1,100 DB510/F0FEAAAAAAAA/commandIn {"sc":$EVTPART1}\
startMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":1}\
pauseMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":2}\
stopMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":3}
attr MQTT_Landroid userReadings mowerActive {\
my $return = (ReadingsVal($name,"mowerActiveIndex","0") eq 1 )? "true" : "false" ;;;;\
$return \
},\
mowerStatusTxt {\
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",\
30 => "Going home",\
31 => "Zone Training",\
32 => "Edge cutting",\
33 => "Searching zone",\
34 => "Pause"\
);;;;\
\
$stateCodes{ReadingsVal($name,"mowerStatusIndex","0")}\
},\
mowerState {\
my $status = ReadingsVal($name,"mowerStatusIndex","0");;;;\
my $error = ReadingsVal($name,"mowerErrorIndex","0");;;;\
my $return = "";;;;\
\
if (($status eq 7 || $status eq 9) && $error eq 0) {\
$return = "true";;;;\
}else{\
$return = "false";;;;\
}\
\
$return \
},\
mowerErrorTxt {\
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"\
);;;;\
\
$errorCodes{ReadingsVal($name,"mowerErrorIndex","0")}\
}
Moin,
tolle Sache, werde ich auch mal antesten.
Ich frage mich jedoch wieso bei der ClientID ein Android- vor die UUid muss. Hat das was mit der Worx-App zu tun unter welchem OS die läuft? Ich nutze jedoch iOS, will nicht wieder ne 24h Sperre von Worx bekommen, deshalb Frage ich lieber mal hier :-)
Gruß
Jan
Zitat von: Jasimo am 25 April 2020, 15:17:38
Moin,
tolle Sache, werde ich auch mal antesten.
Ich frage mich jedoch wieso bei der ClientID ein Android- vor die UUid muss. Hat das was mit der Worx-App zu tun unter welchem OS die läuft? Ich nutze jedoch iOS, will nicht wieder ne 24h Sperre von Worx bekommen, deshalb Frage ich lieber mal hier :-)
Gruß
Jan
Sieht gut aus. Klappt auch mit dem M800i (DB504)
Zitat von: WumpE am 15 April 2020, 12:57:52
für alle die es interessiert, hier mal mein DEFMOD
defmod MQTT_Landroid MQTT2_DEVICE
attr MQTT_Landroid DbLogExclude .*
attr MQTT_Landroid IODev MQTT_Worx
attr MQTT_Landroid jsonMap dat_rsi:announceWifiQuality\
dat_fw:announceFirmware\
dat_mac:announceMacAddress\
cfg_sn:announceSerialNumber\
cfg_tm:lastUpdateTime\
cfg_dt:lastUpdateDate\
dat_dmp_1:directionPitch\
dat_dmp_2:directionRoll\
dat_dmp_3:directionYaw\
dat_bt_t:batteryTemperature\
dat_bt_v:batteryVoltage\
dat_bt_p:batteryLevel\
dat_bt_nr:batteryChargeCycle\
dat_bt_c:batteryCharging\
dat_st_b:totalBladeTime\
dat_st_d:totalDistance\
dat_st_wt:totalTime\
dat_le:mowerErrorIndex\
dat_ls:mowerStatusIndex\
dat_lk:mowerLockState\
cfg_rd:mowerRainDelay\
cfg_sc_m:mowerActiveIndex\
cfg_sc_p:mowerTimeCorrection\
cfg_mz_1:areasArea1\
cfg_mz_2:areasArea2\
cfg_mz_3:areasArea3\
cfg_mz_4:areasArea4\
cfg_mzv_1:areasAreaAct1\
cfg_mzv_2:areasAreaAct2\
cfg_mzv_3:areasAreaAct3\
cfg_mzv_4:areasAreaAct4\
cfg_mzv_5:areasAreaAct5\
cfg_mzv_6:areasAreaAct6\
cfg_mzv_7:areasAreaAct7\
cfg_mzv_8:areasAreaAct8\
cfg_mzv_9:areasAreaAct9\
dat_lz:areasAreaActIndex\
cfg_sc_d_1_1:calendarWeekday0StartTime\
cfg_sc_d_1_2:calendarWeekday0WorkTime\
cfg_sc_d_1_3:calendarWeekday0BorderCut\
cfg_sc_d_2_1:calendarWeekday1StartTime\
cfg_sc_d_2_2:calendarWeekday1WorkTime\
cfg_sc_d_2_3:calendarWeekday1BorderCut\
cfg_sc_d_3_1:calendarWeekday2StartTime\
cfg_sc_d_3_2:calendarWeekday2WorkTime\
cfg_sc_d_3_3:calendarWeekday2BorderCut\
cfg_sc_d_4_1:calendarWeekday3StartTime\
cfg_sc_d_4_2:calendarWeekday3WorkTime\
cfg_sc_d_4_3:calendarWeekday3BorderCut\
cfg_sc_d_5_1:calendarWeekday4StartTime\
cfg_sc_d_5_2:calendarWeekday4WorkTime\
cfg_sc_d_5_3:calendarWeekday4BorderCut\
cfg_sc_d_6_1:calendarWeekday5StartTime\
cfg_sc_d_6_2:calendarWeekday5WorkTime\
cfg_sc_d_6_3:calendarWeekday5BorderCut\
cfg_sc_d_7_1:calendarWeekday6StartTime\
cfg_sc_d_7_2:calendarWeekday6WorkTime\
cfg_sc_d_7_3:calendarWeekday6BorderCut
attr MQTT_Landroid readingList DB510/F0FEAAAAAAAA/commandOut:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr MQTT_Landroid setList mowerRainDelay:slider,0,30,1440 DB510/F0FEAAAAAAAA/commandIn {"rd":$EVTPART1}\
mowerTimeCorrection:slider,-100,1,100 DB510/F0FEAAAAAAAA/commandIn {"sc":$EVTPART1}\
startMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":1}\
pauseMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":2}\
stopMower:noArg DB510/F0FEAAAAAAAA/commandIn {"cmd":3}
attr MQTT_Landroid userReadings mowerActive {\
my $return = (ReadingsVal($name,"mowerActiveIndex","0") eq 1 )? "true" : "false" ;;;;\
$return \
},\
mowerStatusTxt {\
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",\
30 => "Going home",\
31 => "Zone Training",\
32 => "Edge cutting",\
33 => "Searching zone",\
34 => "Pause"\
);;;;\
\
$stateCodes{ReadingsVal($name,"mowerStatusIndex","0")}\
},\
mowerState {\
my $status = ReadingsVal($name,"mowerStatusIndex","0");;;;\
my $error = ReadingsVal($name,"mowerErrorIndex","0");;;;\
my $return = "";;;;\
\
if (($status eq 7 || $status eq 9) && $error eq 0) {\
$return = "true";;;;\
}else{\
$return = "false";;;;\
}\
\
$return \
},\
mowerErrorTxt {\
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"\
);;;;\
\
$errorCodes{ReadingsVal($name,"mowerErrorIndex","0")}\
}
Moin,
hab das von Dir übernommen und auf meinen Landroid angepasst (Model und MAC), eine Sache klappt zumindest bei mir nicht, das setzen von mowerTimeCorrection, kannst Du nochmal gucken?
Gruß
Jan
noch ungetestet, aber zumindest "scheint" es so nun bei mir zu klappen mit dem "mowerTimeCorrection"
attr MQTT_Landroid setList
mowerRainDelay:slider,0,30,1440 DB504/<MAC>/commandIn {"rd":$EVTPART1}\
mowerTimeCorrection:slider,-100,1,100 DB504/<MAC>/commandIn {"sc":{"p":$EVTPART1}}\
startMower:noArg DB504/<MAC>/commandIn {"cmd":1}\
pauseMower:noArg DB504/<MAC>/commandIn {"cmd":2}\
stopMower:noArg DB504/<MAC>/commandIn {"cmd":3}
Hallo zusammen,
wie habt ihr das pollen realisiert?
Mein MQTT Status aktualisiert sich bisher nur wenn ich in der iOS Desktop app "aktualisiere" oder in der FHEM Verbindung zum Amazon Broker ein publish <BOARDID>/<ROVERMAC>/commandIn {}
absetze.
Von sich aus schickt der Mäher keine Updates zu Amazon?
Greetz
Eldrik
Komisch, bei mir klappt das alles ohne das ich eingreifen muss.
Gesendet von iPhone mit Tapatalk Pro
Hallo Leute,
Danke für die Ideen,
irgendwie haben wir den Ersteller und den Ideengeber für MQTT verloren?
Ich habe mal, mit dem was ich hier gefunden (und verstanden) habe, ein attrTemplate gebastelt. Wenn das mal noch einer testen will? Ich würde, wenn das für gut befunden wird, einen neuen Thread im MQTT Board eröffnen - oder der TE verschiebt das Thema dorthin? dann könnten "wir" (Beta-USer :)) das Template offiziell verteilen.
Bis dahin zum Test auf auf meiner "Spielwiese" - in der Raw Def mal folgendes machen:
"wget -qO ./FHEM/lib/AttrTemplate/ottos.template https://raw.githubusercontent.com/heinz-otto/scripts/master/fhem/worx.template"
sleep 5;{ AttrTemplate_Initialize() }
Dann ein Test Device anlegen (das funktioniert einwandfrei parallel)
define MQTT_MowerTest MQTT2_DEVICE
attr MQTT_MowerTest IODev MQTT_Worx
attr MQTT_MowerTest room Mower
Entweder gibt man noch diese Zeile(n) dazu NACHDEM man die echten Werte ersetzt hat:
attr MQTT_MowerTest readingList <BoardID>/<MAC>/commandOut:.* { json2nameValue($EVENT,'',$JSONMAP) }
set MQTT_MowerTest attrTemplate worx_landroid
Oder man wählt gleich im neu entstandenen MQTT_MowerTest das attrTemplate worx_landroid aus und drückt set.
Falls die Zeile fehlt wird man nach der BoardID und MAC gefragt.
Der CloudService liefert bei mir alle 10 minuten von selbst Updates, liegt das an der Einstellung im IO (MQTT_Worx)? -> keepaliveTimeout 600
Gruß Otto
Moin Otto,
ich habe deine Beschreibung testhalber einmal durchgeführt und keine Probleme festgestellt, lediglich bei der TimeCorrection gab es scheinbar eine Änderung, die dein Template nicht aufgegriffen hat, ob diese Änderung soweit das tut was sie soll habe ich selber nicht getestet.
https://forum.fhem.de/index.php/topic,99343.msg1047041.html#msg1047041
Also bei mir ändern sich die Reading Inhalte nicht automatisch, lediglich wenn eine neue Verbindung zur IOT Cloud aufgebaut wird, ich das Update Kommando händisch schicke oder halt per Update in der iOS Worx App.
Ich habe mir jetzt vorerst ein at mit dem passenden publish Befehl erstellt.
Bei der pm2 Methode konnte man ja auch ein Update Intervall im LANDROID Modul hinterlegen daher weiß ich weiterhin nicht, ob die Readings tatsächlich automatisch aktualisiert werden oder ob hierfür noch irgend etwas konfiguriert werden muss :o
Greetz
Eldrik
Hallo Eldrik,
danke fürs testen. Deine Änderung habe ich übernommen (mir ist nicht ganz klar wofür das ist?);)
Wie ist Dein Worx Bridge Gerät konfiguriert? Ist das Attribute gesetzt? Ich weiß aber auch nicht ob es wirklich darin begründet ist.
attr <> keepaliveTimeout 600
Gruß Otto
Zitat von: Otto123 am 08 Juni 2020, 14:31:34
Hallo Eldrik,
danke fürs testen. Deine Änderung habe ich übernommen (mir ist nicht ganz klar wofür das ist?);)
Meine Änderung ist es ja nicht direkt, aber ich meine über die MQTT Kommunikation der im ersten Post erwähnten App gesehen zu haben dass der String zum Server tatsächlich das "p" beinhaltet.
Zitat von: Otto123 am 08 Juni 2020, 14:31:34
Wie ist Dein Worx Bridge Gerät konfiguriert? Ist das Attribute gesetzt? Ich weiß aber auch nicht ob es wirklich darin begründet ist.
attr <> keepaliveTimeout 600
Gruß Otto
ja das Attribut ist bei mir gesetzt, wirkt sich aber auch nicht auf das Verhalten aus, nach meinem Verständnis ist dieses auch nur für das keepalive zum Server, damit dieser die Verbindung nicht abbaut.
Für mich funktioniert es jetzt erst einmal über das zyklische at, dessen Frequenz ich nach Bedarf anpassen kann.
Greetz
Eldrik
Ich behalte das mal im Kopf. Bei mir läuft ja jetzt die APP, iobroker.worx und dies hier.
Ich meine: wenn einer pollt, mithören tun ja alle :)
Hi,
das Template und die Beschreibung zur kompletten Installation ist im MQTT Thread:
https://forum.fhem.de/index.php/topic,111959.0.html
Gruß Otto