For those who own a Willow (formerly called Toadi) robot mower, I’ve created an integration in Home Assistant.
I’ve used Node Red to read the sensor data from the robot and push it to MQTT. In Home Assistant a device + entities are created automatically via MQTT Discovery.
Hello, this looks very good and I took inspiration from what you did to get something similar (less fancy though) in OpenHab…
Thanks a lot for sharing it.
I was wondering how you got the trace displayed this way? Do you generate a GPX file and then load it in openstreet map? How real time were you able to make this?
Nice integration! I just recieved my Willow and tried the integration in my Home Assistant. Followed the instructions for Node Red and MQTT broker. In Node Red MQTT shows as connected, but no new device is being added nor any entities (MQTT discovery is enabled). Any advice on how to further debug?
Quite a few errors in this Node Red integration can be found in my logs:
Logger: homeassistant.helpers.template
Source: helpers/template.py:2209
First occurred: October 25, 2023, 21:14:08 (48889 occurrences)
Last logged: 19:51:41
Template variable warning: ‘dict object’ has no attribute ‘currentZoneId’ when rendering ‘{{ value_json.currentZoneId }}’
Template variable error: list object has no element 1 when rendering ‘{“area”: “{{ value_json.zonesInfo[1].area | round(0) }}”, “elapsedMowingTime”: “{{ (value_json.zonesInfo[1].elapsedMowingTime / 60) | round(0) }}”, “elapsedMowingTimeToday”: “{{ (value_json.zonesInfo[1].elapsedMowingTimeToday / 60) | round(0) }}”, “requiredMowingTime”: “{{ (value_json.zonesInfo[1].requiredMowingTime / 60) | round(0) }}”, “percentageComplete”: “{% if 0 in [ value_json.zonesInfo[1].requiredMowingTime, value_json.zonesInfo[1].elapsedMowingTime ] %}0{% else %}{{ ((value_json.zonesInfo[1].requiredMowingTime / value_json.zonesInfo[1].elapsedMowingTime) * 10) | round(0) }}{% endif %}”}’
Template variable error: list object has no element 1 when rendering ‘{% if value_json.currentZoneId == value_json.zonesInfo[1].id %}Mowing{% else %}Idle{% endif %}’
Template variable error: list object has no element 2 when rendering ‘{“area”: “{{ value_json.zonesInfo[2].area | round(0) }}”, “elapsedMowingTime”: “{{ (value_json.zonesInfo[2].elapsedMowingTime / 60) | round(0) }}”, “elapsedMowingTimeToday”: “{{ (value_json.zonesInfo[2].elapsedMowingTimeToday / 60) | round(0) }}”, “requiredMowingTime”: “{{ (value_json.zonesInfo[2].requiredMowingTime / 60) | round(0) }}”, “percentageComplete”: “{% if 0 in [ value_json.zonesInfo[2].requiredMowingTime, value_json.zonesInfo[2].elapsedMowingTime ] %}0{% else %}{{ ((value_json.zonesInfo[2].requiredMowingTime / value_json.zonesInfo[2].elapsedMowingTime) * 10) | round(0) }}{% endif %}”}’
Template variable error: list object has no element 2 when rendering ‘{% if value_json.currentZoneId == value_json.zonesInfo[2].id %}Mowing{% else %}Idle{% endif %}’
I’ve not fixed the zone issue you mentioned but I’ve added the sensors I could find and also the settings.
Bare with me as I’m not an expert in adding this to MQTT.
But everything seems to work.
This is NOT a drop in replacement as I have changed a lot of the structure in MQTT (more grouped)
Let me know if I missed something.