MQTT2 für Worx Landroid Mähroboter

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

Vorheriges Thema - Nächstes Thema

Otto123

klingt aber wirklich danach, dass Du was gebaut hast, was auf die Regenverzögerung triggert.
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

pillepalle12

Heute bin ich sogar ohne Regen Verzögerung ausgesperrt worden.

Ich versteh es einfach nicht...

frober

Zitat von: pillepalle12 am 20 Juli 2023, 18:59:27Heute bin ich sogar ohne Regen Verzögerung ausgesperrt worden.

Ich versteh es einfach nicht...

Hast du evtl. in Perl (z.B. myUtils) etwas das sendet oder benutzt du die selbe clientId mehrfach?

Andere Möglichkeiten sehe ich nicht.
Der Verursacher muss auf deiner Seite liegen.
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...

manfzimm

Hallo zusammen,

mein Vision verweigert seit einier Zeit ohne erkennbaren Grund die Annahme von FHEM-Befehlen, wie startMower. Über die Hersteller App funktioniert es hingegen.

Die WLAN-Verbindung zum Mäher ist stabil (Ping vom FHEM-Rechner auf Mäher hat keine Drops).

Habe das MQTT2_DEVICE namens LanDroid_Vision_M gelöscht. Es wurde gem Anleitung (https://wiki.fhem.de/wiki/M%C3%A4hroboter:_Worx_Landroid,_Kress,_Landxcape) neu angelegt. Allerdings besteht das Problem weiterhin.

Das IODev LanDroid hat den Status opened

Ein Show MQTT traffic  zeigt:
   
SENT
   
WX/MW/commandIn
   
{"cmd":1}
10:11:41.251
   
SENT
   
WX/MW/WR208E/986d035c-ed22-4002-9ec9-a17a247c7bae/v1/commandIn
   
{}
10:11:42.329
   
RCVD
   
WX/MW/WR208E/986d035c-ed22-4002-9ec9-a17a247c7bae/v1/commandOut
   
{"cfg":{"id":1,"lg":"de","tz":"Europe/Andorra","log":{"imp":0,"diag":0},"rd":0,"cmd":0,"tq":0,"al":{"lvl":1,"t":600},"sc":{"enabled":1,"paused":0,"slots":[],"once":{"time":0,"cfg":{"cut":{"b":0,"z":[]}}}},"modules":{"DF":{"cut":1,"fh":0},"HL":{"enabled":1}},"cut":{"b":0,"z":[],"bd":0,"ob":0},"mz":{"p":[],"s":[{"id":1,"c":1,"cfg":{"cut":{"bd":100,"ob":0}}}]},"vis":{"slab":0}},"dat":{"uuid":"986d035c-ed22-4002-9ec9-a17a247c7bae","fw":"3.31.0+6","tm":"2023-07-22T08:11:35.756Z","ls":1,"le":0,"conn":"wifi","sc":{"slot":0,"once":0},"sh":0,"bt":{"t":18.7,"v":19.4,"p":100,"nr":67,"c":0,"m":0},"dmp":[1.2,6.6,143.8],"st":{"b":5693,"d":92977,"wt":5739,"bl":75},"rsi":-86,"lk":0,"tr":0,"act":1,"rain":{"s":0,"cnt":0},"features":{"ble":0},"head":{"uuid":"986d0362-44c3-4003-8371-3fd289216b7e","act":1,"fw":"1.2.13+3"},"modules":{"DF":{"stat":"ok"},"HL":{"stat":"ok","on":0}},"mac":"505A65D90DCD","cam":{"status":0,"error":0},"rfid":{"status":0},"mz":[{"id":1,"p":75925,"a":221814205}],"cut":{"z":0}}}

Das MQTT2_DEVICE namens LanDroid_Vision_M zeigt aktuell auch viele Readings an (Auszug):
mqtt_endpoint     iot.eu-west-1.worxlandroid.com
Allerdings fehlen Readings wie mowerActive, mowerStatusTxt, mowerErrorTxt

Nun ja, hat vielleicht jemand eine Idee, warum die Befehle via FHEM ignoriert werden ?

Ganz lieben Dank für Eure Unterstützung!!!!

Manfred



Flachzange

Hallo Manfred,

das einzige, was an der MQTT-Antwort merkwürdig ist, sind die fehlenden Einträge für den Zeitplan. Das sollte aber irgendwie auch nicht die Erklärung für die nicht funktionierende Steuerung sein.

Stelle bitte mal
  • das iot.log oder das komplette Zip direkt vom Mäher
  • komplettes Device Listing

hier zur Verfügung plus Info, wann Du den FHEM command abgesetzt hast.

manfzimm

Hallo nochmals

und vielen Dank für die Unterstützung.

Hoffentlich packe ich hier das richtige Log rein.

1. LanDroid_Vision_M-2023.log:

2023-07-22_09:42:00 LanDroid_Vision_M cfg_log_imp: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_id: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_head_act: 1
2023-07-22_09:42:00 LanDroid_Vision_M cfg_al_t: 600
2023-07-22_09:42:00 LanDroid_Vision_M cfg_mz_s_1_id: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_mac: 505A65D90DCD
2023-07-22_09:42:00 LanDroid_Vision_M dat_mz_1_a: 221814205
2023-07-22_09:42:00 LanDroid_Vision_M dat_tr: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_st_d: 92977
2023-07-22_09:42:00 LanDroid_Vision_M cfg_vis_slab: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_rfid_status: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_lg: de
2023-07-22_09:42:00 LanDroid_Vision_M dat_dmp_3: 143.7
2023-07-22_09:42:00 LanDroid_Vision_M dat_mz_1_p: 75925
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_t: 18.4
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_c: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_rain_cnt: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_m: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_mz_s_1_cfg_cut_ob: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_log_diag: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_modules_DF_fh: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_rain_s: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_dmp_2: 6.6
2023-07-22_09:42:00 LanDroid_Vision_M cfg_tz: Europe/Andorra
2023-07-22_09:42:00 LanDroid_Vision_M dat_head_fw: 1.2.13+3
2023-07-22_09:42:00 LanDroid_Vision_M dat_mz_1_id: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_dmp_1: 1.2
2023-07-22_09:42:00 LanDroid_Vision_M cfg_al_lvl: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_cut_z: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_cam_error: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_mz_s_1_cfg_cut_bd: 100
2023-07-22_09:42:00 LanDroid_Vision_M dat_sh: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_st_wt: 5739
2023-07-22_09:42:00 LanDroid_Vision_M dat_le: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_uuid: 986d035c-ed22-4002-9ec9-a17a247c7bae
2023-07-22_09:42:00 LanDroid_Vision_M cfg_sc_enabled: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_cam_status: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_conn: wifi
2023-07-22_09:42:00 LanDroid_Vision_M dat_lk: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_p: 100
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_nr: 67
2023-07-22_09:42:00 LanDroid_Vision_M dat_sc_once: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_head_uuid: 986d0362-44c3-4003-8371-3fd289216b7e
2023-07-22_09:42:00 LanDroid_Vision_M cfg_tq: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_sc_slot: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_mz_s_1_c: 1
2023-07-22_09:42:00 LanDroid_Vision_M dat_modules_HL_stat: ok
2023-07-22_09:42:00 LanDroid_Vision_M dat_modules_DF_stat: ok
2023-07-22_09:42:00 LanDroid_Vision_M dat_rsi: -87
2023-07-22_09:42:00 LanDroid_Vision_M dat_st_bl: 75
2023-07-22_09:42:00 LanDroid_Vision_M cfg_modules_HL_enabled: 1
2023-07-22_09:42:00 LanDroid_Vision_M cfg_cut_ob: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_features_ble: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_modules_HL_on: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_sc_paused: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_sc_once_cfg_cut_b: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_fw: 3.31.0+6
2023-07-22_09:42:00 LanDroid_Vision_M dat_st_b: 5693
2023-07-22_09:42:00 LanDroid_Vision_M dat_act: 1
2023-07-22_09:42:00 LanDroid_Vision_M cfg_sc_once_time: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_bt_v: 19.6
2023-07-22_09:42:00 LanDroid_Vision_M cfg_cut_b: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_tm: 2023-07-22T07:41:53.982Z
2023-07-22_09:42:00 LanDroid_Vision_M cfg_modules_DF_cut: 1
2023-07-22_09:42:00 LanDroid_Vision_M cfg_rd: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_cmd: 0
2023-07-22_09:42:00 LanDroid_Vision_M cfg_cut_bd: 0
2023-07-22_09:42:00 LanDroid_Vision_M dat_ls: 1
2023-07-22_09:42:36 LanDroid_Vision_M attrTemplateVersion: 20221101

2. Device Listing:
define LanDroid_Vision_M MQTT2_DEVICE
setuuid LanDroid_Vision_M 64bb8847-f33f-f431-fc59-e309f0925392b1ce
attr LanDroid_Vision_M IODev LanDroid
attr LanDroid_Vision_M alias Mower
attr LanDroid_Vision_M devicetopic WX/MW
attr LanDroid_Vision_M event-on-change-reading .*
attr LanDroid_Vision_M icon scene_robo_lawnmower
attr LanDroid_Vision_M jsonMap dat_rsi:wifiQuality dat_fw:firmware cfg_sn:SerialNumber\
dat_le:mowerErrorIndex dat_ls:mowerStatusIndex\
cfg_rd:mowerRainDelay cfg_sc_m:mowerActiveIndex cfg_sc_p:mowerTimeCorrection cfg_tq:torqueSetting\
dat_bt_t:batteryTemperature dat_bt_v:batteryVoltage dat_bt_p:batteryPercent dat_bt_nr:batteryChargeCycle dat_bt_c:batteryCharging\
dat_st_b:totalBladeTime dat_st_d:totalDistance dat_st_wt:totalTime dat_st_bl:borderLength\
dat_dmp_1:directionPitch dat_dmp_2:directionRoll dat_dmp_3:directionYaw
attr LanDroid_Vision_M model worx_landroid_mower
attr LanDroid_Vision_M readingList $DEVICETOPIC/commandOut:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr LanDroid_Vision_M room Garten,MQTT2_DEVICE
attr LanDroid_Vision_M setList 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}\
  pauseMower:noArg $DEVICETOPIC/commandIn {"cmd":2}\
  stopMower:noArg $DEVICETOPIC/commandIn {"cmd":3}\
  torqueSetting:slider,-50,1,50 $DEVICETOPIC/commandIn {"tq":$EVTPART1}\
  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)}
attr LanDroid_Vision_M stateFormat Active: mowerActive, Status: mowerStatusTxt, Error: mowerErrorTxt
attr LanDroid_Vision_M userReadings 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",\
 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"\
);; $errorCodes{ReadingsVal($name,"mowerErrorIndex","0")}}

Flachzange

Also ich musste

attr <device> devicetopic
explizit setzen damit es funktioniert. Siehe hier: https://forum.fhem.de/index.php?msg=1277353


Zu 1) Ich meinte die logs, die Du direkt vom Mäher bekommst (USB-Stick einstecken und warten)

manfzimm

Wow, genau das war es.

attr LanDroid_Vision_M devicetopic WX/MW/WR208E/xxxBLABLUBBxxx/v1

Sorry, das hatte ich ich im Forum nicht gesehen.

Tausend Dank für die Unterstützung !!!

vencam

Muss mich hier mal bedanken! Ist jetzt total easy zu installieren und läuft top :)

eldrik

Moin zusammen,

vielleicht hat ja einer eine Idee, ich hab meinen Worx auch mal wieder in FHEM aktiviert und neu hinterlegt (FHEM aktualisiert, alte MQTT2_DEVICE und MQTT2_Client Definitionen gelöscht und neue mit anderen Namen angelegt).

Für die Dauer eines Tages scheint auch soweit alles ok, der Status in FHEM als auch in der iOS Worx App ist abrufbar, wenngleich die MQTT Verbindung über    
MQTT2_CLIENT nicht immer auf connected steht.

Mir fällt dann meist abends mit Blickrichtung zum Garten auf, dass die Lade LED des Mowersstation über einen längeren Zeitpunkt blinkt.

Am nächsten Tag ist dann der Mower weder in FHEM noch über die iOS App erreichbar, dann setz ich das MQTT2_CLIENT Device auf disabled 1 und kann den Mower am nächsten Tag wieder normal verwenden.

Greetz
Eldrik


rudolfkoenig

Womoeglich steht im FHEM-Log eine Begruendung, es lohnt sich einen Blick reinzufwerfen.

eldrik

Zitat von: rudolfkoenig am 28 August 2023, 13:03:31Womoeglich steht im FHEM-Log eine Begruendung, es lohnt sich einen Blick reinzufwerfen.

stimmt natürlich! Ich hatte für das MQTT2_CLIENT Device auch irgendwann einmal auf Basis eines anderen Beitrags hier im Thread verbose 4 gesetzt:

Es finden sich diverse Reconnects vom Typ

2023.08.24 15:14:28.527 4: MQTT_Worx: reusing the acess_token
2023.08.24 15:14:28.714 4: MQTT_Worx: Got userId: 180051
2023.08.24 15:14:29.079 4: MQTT_Worx: Got device info
2023.08.24 15:14:29.123 4: IP: iot.eu-west-1.worxlandroid.com -> 54.155.186.133
2023.08.24 15:14:29.309 4: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.08.24 15:14:29.379 4: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT_Worx)

und irgendwann wird scheinbar aufgegeben wenn die maxFailedConnects Meldungen zu dem Device gehören, zumindest passt die (20) zum maxFailedConnects Attributes des Devices.

2023.08.24 15:14:28.527 4: MQTT_Worx: reusing the acess_token
2023.08.24 15:14:28.714 4: MQTT_Worx: Got userId: 180051
2023.08.24 15:14:29.079 4: MQTT_Worx: Got device info
2023.08.24 15:14:29.123 4: IP: iot.eu-west-1.worxlandroid.com -> 54.155.186.133
2023.08.24 15:14:29.309 4: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.08.24 15:14:29.379 4: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT_Worx)
2023.08.24 15:17:28.589 4: MQTT_Worx: reusing the acess_token
2023.08.24 15:17:30.255 4: MQTT_Worx: Got userId: 180051
2023.08.24 15:17:30.485 4: MQTT_Worx: Got device info
2023.08.24 15:17:30.526 4: IP: iot.eu-west-1.worxlandroid.com -> 34.253.243.233
2023.08.24 15:17:30.651 4: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.08.24 15:17:30.736 4: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT_Worx)
2023.08.24 15:20:28.622 4: MQTT_Worx: reusing the acess_token
2023.08.24 15:20:28.833 4: MQTT_Worx: Got userId: 180051
2023.08.24 15:20:29.128 4: MQTT_Worx: Got device info
2023.08.24 15:20:29.179 4: IP: iot.eu-west-1.worxlandroid.com -> 54.76.230.176
2023.08.24 15:20:29.298 4: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.08.24 15:20:29.416 4: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT_Worx)
2023.08.24 15:23:28.786 4: MQTT_Worx: reusing the acess_token
2023.08.24 15:23:29.617 4: MQTT_Worx: Got userId: 180051
2023.08.24 15:23:29.914 4: MQTT_Worx: Got device info
2023.08.24 15:23:29.952 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:29.969 4: IP: iot.eu-west-1.worxlandroid.com -> 52.208.23.126
2023.08.24 15:23:29.971 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.010 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.042 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.047 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.079 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.081 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.113 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.149 4: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT_Worx)
2023.08.24 15:23:30.170 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.181 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.190 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.226 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.244 4: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT_Worx)
2023.08.24 15:23:30.280 2: maxFailedConnects (20) reached, no more reconnect attemtps
2023.08.24 15:23:30.280 2: maxFailedConnects (20) reached, no more reconnect attemtps


defmod vom MQTT2_CLIENT

defmod MQTT_Worx MQTT2_CLIENT xx
attr MQTT_Worx connectFn {use LandroidUtils;;;;Landroid_connect($NAME,"worx",1)}
attr MQTT_Worx disable 1
attr MQTT_Worx execAfterConnect { my $h=$defs{$NAME};;MQTT2_CLIENT_doPublish($h,'PRM100/98D863315B2C/commandIn','{}')}
attr MQTT_Worx keepaliveTimeout 600
attr MQTT_Worx maxFailedConnects 20
attr MQTT_Worx nextOpenDelay 180
attr MQTT_Worx subscriptions PRM100/98D863315B2C/commandOut
attr MQTT_Worx username username@meineadresse.de (anonymisiert)
attr MQTT_Worx verbose 4


defmod vom MQTT2_DEVICE

defmod MQTT_Worx_M MQTT2_DEVICE
attr MQTT_Worx_M IODev MQTT_Worx
attr MQTT_Worx_M alias Mower
attr MQTT_Worx_M devicetopic PRM100/98D863315B2C
attr MQTT_Worx_M event-on-change-reading .*
attr MQTT_Worx_M group Rasenmäher
attr MQTT_Worx_M icon scene_robo_lawnmower
attr MQTT_Worx_M jsonMap dat_rsi:wifiQuality dat_fw:firmware cfg_sn:SerialNumber\
dat_le:mowerErrorIndex dat_ls:mowerStatusIndex\
cfg_rd:mowerRainDelay cfg_sc_m:mowerActiveIndex cfg_sc_p:mowerTimeCorrection cfg_tq:torqueSetting\
dat_bt_t:batteryTemperature dat_bt_v:batteryVoltage dat_bt_p:batteryPercent dat_bt_nr:batteryChargeCycle dat_bt_c:batteryCharging\
dat_st_b:totalBladeTime dat_st_d:totalDistance dat_st_wt:totalTime dat_st_bl:borderLength\
dat_dmp_1:directionPitch dat_dmp_2:directionRoll dat_dmp_3:directionYaw
attr MQTT_Worx_M model worx_landroid_mower
attr MQTT_Worx_M readingList $DEVICETOPIC/commandOut:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr MQTT_Worx_M room Garten
attr MQTT_Worx_M setList 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}\
  pauseMower:noArg $DEVICETOPIC/commandIn {"cmd":2}\
  stopMower:noArg $DEVICETOPIC/commandIn {"cmd":3}\
  torqueSetting:slider,-50,1,50 $DEVICETOPIC/commandIn {"tq":$EVTPART1}\
  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)}
attr MQTT_Worx_M stateFormat Active: mowerActive, Status: mowerStatusTxt, Error: mowerErrorTxt, Batterie batteryPercent%
attr MQTT_Worx_M userReadings 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",\
 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"\
);; $errorCodes{ReadingsVal($name,"mowerErrorIndex","0")}}

setstate MQTT_Worx_M Active: Yes, Status: Home, Error: No error, Batterie 100%
setstate MQTT_Worx_M 2023-08-07 20:05:50 IODev MQTT_Worx
setstate MQTT_Worx_M 2023-08-24 14:23:29 SerialNumber 2019301984010091498B
setstate MQTT_Worx_M 2023-07-29 20:37:49 attrTemplateVersion 20221101
setstate MQTT_Worx_M 2023-08-24 14:23:29 batteryChargeCycle 749
setstate MQTT_Worx_M 2023-08-24 14:23:29 batteryCharging 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 batteryPercent 100
setstate MQTT_Worx_M 2023-08-24 14:23:29 batteryTemperature 23.3
setstate MQTT_Worx_M 2023-08-24 14:23:29 batteryVoltage 19.39
setstate MQTT_Worx_M 2023-08-24 15:23:29 battery_charge_cycles 748
setstate MQTT_Worx_M 2023-08-24 15:23:29 blade_work_time 62238
setstate MQTT_Worx_M 2023-08-24 15:23:29 blade_work_time_reset 42698
setstate MQTT_Worx_M 2023-08-24 15:23:29 blade_work_time_reset_at 2021-08-15 15:59:29
setstate MQTT_Worx_M 2023-08-24 14:23:29 borderLength 45
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_1 auto_lock
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_10 ota_upgrade
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_11 pairing_smartlink
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_12 pause_over_border
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_13 pause_over_wire
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_14 rain_delay
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_15 rain_delay_start
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_16 safe_go_home
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_17 scheduler_two_slots
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_18 unrestricted_mowing_time
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_19 zone_keeper
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_2 border_cut
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_3 digital_fence_settings
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_4 follow_border
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_5 lock
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_6 mqtt
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_7 multi_zone
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_8 multi_zone_percentage
setstate MQTT_Worx_M 2023-08-24 15:23:29 capabilities_9 one_time_scheduler
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_al_lvl 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_al_t 60
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_cmd 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_dt 24/08/2023
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_id 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_lg en
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mz_1 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mz_2 4
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mz_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mz_4 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzk 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_1 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_10 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_2 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_3 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_4 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_5 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_6 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_7 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_8 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_mzv_9 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_1_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_1_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_1_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_2_1 11:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_2_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_2_3 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_3_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_3_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_3_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_4_1 11:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_4_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_4_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_5_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_5_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_5_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_6_1 11:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_6_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_6_3 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_7_1 11:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_7_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_d_7_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_1_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_1_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_1_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_2_1 18:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_2_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_2_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_3_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_3_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_3_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_4_1 18:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_4_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_4_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_5_1 00:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_5_2 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_5_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_6_1 18:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_6_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_6_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_7_1 18:00
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_7_2 90
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_dd_7_3 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_distm 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_ots_bc 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_sc_ots_wtm 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 cfg_tm 14:23:28
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_country_id 276
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_created_at 2018-02-15 22:21:35
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_id 2808893
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_latitude 52.900002
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_longitude 8.43333
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_name Wildeshausen
setstate MQTT_Worx_M 2023-08-24 15:23:29 city_updated_at 2018-02-15 22:21:35
setstate MQTT_Worx_M 2023-08-24 15:23:29 created_at 2019-01-24 07:30:04
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_act 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_bt_m 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_conn wifi
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_fwb 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_lk 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_lz 8
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_mac 98D863315B2C
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_rain_cnt 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_rain_s 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_time_l 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_time_r 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 dat_tr 0
setstate MQTT_Worx_M 2023-08-24 15:23:29 diagnostic true
setstate MQTT_Worx_M 2023-08-24 14:23:29 directionPitch -1.3
setstate MQTT_Worx_M 2023-08-24 14:23:29 directionRoll -0.2
setstate MQTT_Worx_M 2023-08-24 14:23:29 directionYaw 11.6
setstate MQTT_Worx_M 2023-08-24 15:23:29 distance_covered 971890
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_auto_lock 3.25
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_chassis m_2019
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_digital_fence_settings 3.25
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_display_type tube
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_input_type keyboard_tube
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_lock true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_mqtt true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_multi_zone true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_multi_zone_percentage true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_multi_zone_zones 4
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_one_time_scheduler 3.15
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_pause_over_wire 3.26
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_rain_delay true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_rain_delay_start 3.08
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_safe_go_home 3.25
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_scheduler_two_slots 3.15
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_unrestricted_mowing_time true
setstate MQTT_Worx_M 2023-08-24 15:23:29 features_wifi_pairing smartlink
setstate MQTT_Worx_M 2023-08-24 14:23:29 firmware 3.32
setstate MQTT_Worx_M 2023-08-24 15:23:29 firmware_auto_upgrade true
setstate MQTT_Worx_M 2023-08-24 15:23:29 firmware_version 3.32
setstate MQTT_Worx_M 2023-08-24 15:23:29 id 291487
setstate MQTT_Worx_M 2023-08-24 15:23:29 improvement true
setstate MQTT_Worx_M 2023-08-24 15:23:29 iot_registered true
setstate MQTT_Worx_M 2023-08-14 12:00:57 json2nameValueErrorText error parsing (#2) '␎�J��␝�Ԋ�.␂��R��J��␝�Ԋ�.␂��R��␁ �I␁ H>␃'
setstate MQTT_Worx_M 2023-08-14 12:00:57 json2nameValueInput ␎�J��␝�Ԋ�.␂��R��J��␝�Ԋ�.␂��R��␁ �I␁ H>␃
setstate MQTT_Worx_M 2023-08-24 15:23:29 lawn_perimeter 47
setstate MQTT_Worx_M 2023-08-24 15:23:29 lawn_size 100
setstate MQTT_Worx_M 2023-08-24 15:23:29 locked false
setstate MQTT_Worx_M 2023-08-24 15:23:29 mac_address 98D863315B2C
setstate MQTT_Worx_M 2023-07-29 20:41:41 mowerActive Yes
setstate MQTT_Worx_M 2023-08-24 14:23:29 mowerActiveIndex 1
setstate MQTT_Worx_M 2023-08-24 14:23:29 mowerErrorIndex 0
setstate MQTT_Worx_M 2023-08-14 12:01:00 mowerErrorTxt No error
setstate MQTT_Worx_M 2023-08-24 14:23:29 mowerRainDelay 0
setstate MQTT_Worx_M 2023-08-24 14:23:29 mowerStatusIndex 1
setstate MQTT_Worx_M 2023-08-24 10:31:01 mowerStatusTxt Home
setstate MQTT_Worx_M 2023-08-24 14:23:29 mowerTimeCorrection -100
setstate MQTT_Worx_M 2023-08-24 15:23:29 mower_work_time 65138
setstate MQTT_Worx_M 2023-08-24 15:23:29 mqtt_endpoint iot.eu-west-1.worxlandroid.com
setstate MQTT_Worx_M 2023-08-24 15:23:29 mqtt_registered true
setstate MQTT_Worx_M 2023-08-24 15:23:29 mqtt_topics_command_in PRM100/98D863315B2C/commandIn
setstate MQTT_Worx_M 2023-08-24 15:23:29 mqtt_topics_command_out PRM100/98D863315B2C/commandOut
setstate MQTT_Worx_M 2023-08-24 15:23:29 name M
setstate MQTT_Worx_M 2023-08-24 15:23:29 online true
setstate MQTT_Worx_M 2023-08-24 15:23:29 pin_code 0000
setstate MQTT_Worx_M 2023-08-24 15:23:29 product_id 49
setstate MQTT_Worx_M 2023-08-24 15:23:29 protocol 0
setstate MQTT_Worx_M 2023-08-24 15:23:29 purchased_at 2019-04-26 00:00:00
setstate MQTT_Worx_M 2023-08-24 15:23:29 push_notifications true
setstate MQTT_Worx_M 2023-08-24 15:23:29 push_notifications_level notice
setstate MQTT_Worx_M 2023-08-24 15:23:29 registered_at 2019-05-01 00:00:00
setstate MQTT_Worx_M 2023-08-24 15:23:29 serial_number 1234567890
setstate MQTT_Worx_M 2023-08-24 15:23:29 setup_location_latitude 52.901773
setstate MQTT_Worx_M 2023-08-24 15:23:29 setup_location_longitude 8.467414
setstate MQTT_Worx_M 2023-08-25 09:11:21 state startMower
setstate MQTT_Worx_M 2023-08-24 15:23:29 test false
setstate MQTT_Worx_M 2023-08-24 15:23:29 time_zone Europe/Berlin
setstate MQTT_Worx_M 2023-08-24 14:23:29 torqueSetting -30
setstate MQTT_Worx_M 2023-08-24 14:23:29 totalBladeTime 62322
setstate MQTT_Worx_M 2023-08-24 14:23:29 totalDistance 973349
setstate MQTT_Worx_M 2023-08-24 14:23:29 totalTime 65224
setstate MQTT_Worx_M 2023-08-24 15:23:29 updated_at 2023-07-31 09:42:05
setstate MQTT_Worx_M 2023-08-24 15:23:29 user_id 180051
setstate MQTT_Worx_M 2023-08-24 15:23:29 uuid 96c52db8-410a-4002-a8c8-29b199a62333
setstate MQTT_Worx_M 2023-08-24 15:23:29 warranty_expires_at 2022-04-26 00:00:00
setstate MQTT_Worx_M 2023-08-24 15:23:29 warranty_registered true
setstate MQTT_Worx_M 2023-08-24 14:23:29 wifiQuality -83


fred_feuerstein

#747
das Problem habe ich auch seit ca. 2 bis 3 Wochen.
An der config hat sich meinerseits nichts geändert und es lief vorher über Monate (seit MQTT Neueinführung für den Worx) sehr problemlos.

Die Logs sehen sehr ähnlich aus wie bei Dir.

Ich muss dann auch das MQTT device auf disable setzen und einen Tag warten. Dann wieder aktivieren, set ... connect und es läuft wieder für eine gewisse Zeit, ggfs. ein paar Tage oder auch nur einen Tag teilweise.

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

rudolfkoenig

Nach dem Log wuerde ich sagen, dass "reusing the access token" womoeglich nicht immer eine gute Idee ist.

fred_feuerstein

Was müsste man denn ändern? die Abfragezeiten/Abstände?!

So ist es recht nervig, da aktuell bei mir täglich die Verbindung dann nicht mehr möglich ist, dann auf disable gesetzt werden muss und erst am nächsten Tag wieder versucht werden kann auf disable=0 und dann connect zu machen.
In der Zeit ist dann natürlich auch keine Verbindung über die Worx App möglich, da dort auch gesperrt. Teilweise gehe ich dann zum Mäher selbst, um ihn per Hand einzuschalten ;)

Hat sonst keiner das Problem?
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