Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - PeterLinuxOSS/ha_openmower: OpenMower integration for HomeAssistant · GitHub
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

OpenMower integration for HomeAssistant

Openmower is the DIY RTK GPS Smart Mowing Robot for Everyone! Based on the YardForce classic 500 lawn mover and fully open source. A custom built motherboard, a raspberry pi and a GPS module gets rid of the guide wire and makes software the key factor in the project.

openmower.de

Openmower on github

This integration is based on MQTT messages from the openmower container that runs on the RPI.

It will give you full control over the mower. Buttons to start, stop, pause, create automations from etc. Statistics like battery load, motor temperature, location. GPS coordinates are integrated into the device tracker.

alt text

Prerequisites

  • A functional openmower (doh!)
  • A software version where MQTT is supported, currently only on the edge version.
  • Activated MQTT in openmower config (/boot/openmower/mover_config.txt)
export OM_MQTT_ENABLE="True" # Enable or disable
export OM_MQTT_HOSTNAME="10.2.3.4" # IP or hostname of your HA
export OM_MQTT_PORT="1883" # Port, default 1883
export OM_MQTT_USER="mqtt_om" # MQTT user on your HA
export OM_MQTT_PASSWORD="mqtt_om" # MQTT password on your HA
export OM_MQTT_TOPIC_PREFIX="openmower" # The prefix that all MQTT traffic from this mower should have. If you have multiple mowers this can be used to separate them.
  • Home assistant with HACS
  • Mosquitto or similar MQTT broker. Mosquitto is the easiest to install, you find it in the add-on store.

alt textalt text

Once installed it will turn up in the normal integrations as MQTT.

alt text

Installation

Install via HACS by adding https://github.com/vermut/ha_openmower.git as a Custom Repository. Refresh HACS, go to Openmower and download the integration.

Add the integration in settings -> integrations. Here you fill in the details for your mower. I.e. the prefix and the LAT/LONG from the openmower config file.

alt text

Your mower should now turn up in Home assistant

alt text

alt text

On the lawn_mower.openmower you have the start/pause/return to home commands.

alt text

If you want to expose those buttons directly in the dashboard, add them as scripts:

alt text

Troubleshooting

Verify that mqtt is active on the openmower and check if xbot_monitoring is connected to homeassistant.

openmower@openmower:~ $ sudo netstat -pnt | grep 1883 | grep xbot_monitoring
tcp 0 0 127.0.0.1:42818 127.0.0.1:1883 ESTABLISHED 911/xbot_monitoring
tcp 0 0 <MOWER_IP>:43340 <HOMEASSISTANT_IP>:1883 ESTABLISHED 911/xbot_monitoring

Verify that messages actually reach HA. In the MQTT integration listen for topic # or e.g. openmower/# if your prefix is openmower.

alt text

Additional resources

RPI MQTT monitor Nice way to get stats from the RPI into your HA. Install as a service/container on the RPI. In Mosquitto you add a bridge config for the messages.

alt text

Place the config file in /share/mosquitto in your HA and set active to true, remember to do it IN the HA container if you run like that.

HA built in GIT integration

For those staying on the edge(!) of development, see what the latest commits are. Update or not?

HA automation examples

prisukamas delivers this automation. "I'm using this automation to send a pushover if mower is i IDLE state for > 10 mins and not charging with battery level lower than 98%, works fine:"

- alias: "OpenMower Failed Docking Alert"
trigger:
platform: state
entity_id: sensor.openmower_current_state
to: 'IDLE'
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.openmower_is_charging
state: 'off'
- condition: numeric_state
entity_id: sensor.openmower_battery
below: 98
action:
service: notify.pushover
data:
message: "OpenMower possibly failed to dock Battery level is {{ states('sensor.openmower_battery') }}%."

2m has this automation. "I am also using this automation to send a push notification to phones running Home Assistant app when OM enters emergency mode:"

- alias: OpenMower Emergency -> Mobile Notification
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.openmower_emergency
from: "off"
to: "on"
condition: []
action:
- service: notify.openmower_notification_devices
data:
title: OpenMower Emergency
message: OpenMower got into the emergency mode
data:
clickAction: lovelace/4
color: red
mode: single

Here notify.openmower_notification_devices is defined in configuration.yaml as:

notify:
- name: openmower_notification_devices
platform: group
services:
- service: mobile_app_pixel_8_pro
- service: mobile_app_pixel_tablet
- service: mobile_app_pixel_5

pinussen has this to start mowing if rain has not fallen or is predicted today. The rain sensor was set up following this Smart home junkie video

alias: Mow the lawn
description: ""
trigger:
- platform: sun
event: sunrise
offset: "3:00:00"
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.total_rain_fallen_plus_expected
below: 1
- condition: numeric_state
entity_id: sensor.openmower_battery
above: 95
- condition: state
entity_id: sensor.openmower_current_state
state: IDLE
sequence:
- service: button.press
data: {}
target:
entity_id: button.openmower_start_mowing
mode: single

Button scripts

Example of script to start the mowing.

alias: Start mowing
sequence:
- service: lawn_mower.start_mowing
metadata: {}
data: {}
target:
device_id: 2f51ea5d53384b5c8af44e3874fa295f
mode: single
icon: mdi:play

Added in the dashboard like this:

cards:
- type: entity
entity: lawn_mower.openmower
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: script.start_mowing
icon: mdi:play
name: Start

Example dashboards

simple dashboard

simple dashboard with GIT integration and raspberry monitor

About

OpenMower integration for HomeAssistant

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages