Control Worx Landroid S via Hassio

Any news on installing the addon on RPI3/4? @hschroyen the gitub issue is still in state: closed

Hello,

I tried to reopen it but without success…perhaps I did something wrong.
I am still not able to install this neither…it hangs my system.

Regards

Update : so I opened a new issue

Hi
I have installed Mosquito broker and set up with acl, user landroid, homeassistant both with readwrite. Also added MQTT from integrations. No integrations show up.
I have installed Worx landroid s android integration https://github.com/Barma-lej/halandroid . this is working and publishing my robotgras mover to my hassio on port 3000. This has topic landroid
No information is showing up on my sensors from the landroid integration.
What am i missing?

Any update on the not install issue? This really should be noted as it totally crashes the raspberry (well almost. luckily i could ssh in after 10min and reboot)

Hey Guys
I just found https://github.com/MTrab/landroid_cloud, and are installing it now. Check it out :slight_smile:

EDIT:
All setup! Huge shoutout to this guy. No more virtualzone:) @Mtrab

5 Likes

Could you share your setup for the picture you are showing?

1 Like

Heyhey,

also tried to test out the landroid_cloud component. Unfortunately it did not work for me.
The component is loaded and even the configuration doesn’t throw an error:

landroid_cloud:
  email: [email protected]
  password: YourPassword

But I do not get any identities created…
Also tryed via the “Add Integration” way but it did not work.

Where did I go wrong?

Thanks

Jakob

Hey does sensors not even generate? or are u just missing start/stop controls…

My Azor

Home Assistant 0.109.3

WR130E

MTrab/ landroid_cloud


1 Like

Hi Juice,

how did you configure the start/stop/home buttons? (And this nice picture :slight_smile: ) In my config I just see the 3 sensors.

Hi Juice, can you share how to prepare your dashboard? :slight_smile:

Hi Jakob,

Did you ever resolve this issue? I’m having the exact same problem now. The identities are not created at all.

Regards,
Chris

Hey @c_gjerstad,

things were fixed over time. Using this since quite a while now and its the best landroid integration, I know. Think, I´ve tested three to five over the time. Working with a home assistant package, that contains (nearly) all stuff, that is needed for the integration. Only thing, that is missing afaik is the lovelace gui stuff. Adding both:

Package

#-------------------------------------------
# Packages / landroid_cloud
# https://github.com/MTrab/landroid_cloud/releases
# https://github.com/Barma-lej/halandroid/blob/1d0c565c59c7067f33c4b447f98cdf62f5c829fd/packages/landroid.yaml
#-------------------------------------------
################################################
## Customization
################################################
#homeassistant:
#  customize:
#    sensor.landroid_[NAME_FROM_APP]_battery
#      friendly_name: BLawn Battery
#    sensor.landroid_[NAME_FROM_APP]_error
#      friendly_name: BLawn Error
#    sensor.landroid_[NAME_FROM_APP]_status
#      friendly_name: BLawn Status
#    switch.landroid_cloud.start
#      friendly_name: BLawn Start
#    switch.landroid_cloud.stop
#      friendly_name: BLawn Stop
#    switch.landroid_cloud.pause
#      friendly_name: BLawn Pause
################################################
## Landroid Cloud
################################################
landroid_cloud:
  email: !secret hag_landroid_mail
  password: !secret hag_landroid_pass
################################################
## Switch
################################################
switch:
  - platform: template
    switches:
      landroid_mowing:
        value_template: "{{ is_state_attr('sensor.landroid_blawn_status', 'status_id', 7) }}"
        turn_on:
          service: script.landroid_start
        turn_off:
          service: script.landroid_stop
################################################
## Sensor
################################################
sensor:
  - platform: template
    sensors:
      landroid_bat:
        friendly_name: Battery level
        value_template: >-
          {% if is_state_attr('sensor.landroid_blawn_battery', 'charging', 1) -%}Charging
          {%- else -%}Discharging
          {%- endif %}
        icon_template: >-
          {% set level = states('sensor.landroid_blawn_battery') | float -%}
          {%- if is_state_attr('sensor.landroid_blawn_battery', 'charging', 1) -%}
            {%- if level > 99 -%}mdi:battery-charging-100
            {%- elif level > 89 -%}mdi:battery-charging-90
            {%- elif level > 79 -%}mdi:battery-charging-80
            {%- elif level > 69 -%}mdi:battery-charging-70
            {%- elif level > 59 -%}mdi:battery-charging-60
            {%- elif level > 49 -%}mdi:battery-charging-50
            {%- elif level > 39 -%}mdi:battery-charging-40
            {%- elif level > 29 -%}mdi:battery-charging-30
            {%- elif level > 19 -%}mdi:battery-charging-20
            {%- elif level > 9 -%}mdi:battery-charging-10
            {%- else -%}mdi:battery-charging-outline
            {%- endif -%}
          {%- else -%}
            {%- if level > 99 -%}mdi:battery
            {%- elif level > 89 -%}mdi:battery-90
            {%- elif level > 79 -%}mdi:battery-80
            {%- elif level > 69 -%}mdi:battery-70
            {%- elif level > 59 -%}mdi:battery-60
            {%- elif level > 49 -%}mdi:battery-50
            {%- elif level > 39 -%}mdi:battery-40
            {%- elif level > 29 -%}mdi:battery-30
            {%- elif level > 19 -%}mdi:battery-20
            {%- elif level > 9 -%}mdi:battery-10
            {%- else -%}mdi:battery-outline
            {%- endif -%}
          {%- endif %}
      landroid_bladetime:
        friendly_name: Landroid Blade Time
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'blade_time') }}"
        attribute_templates:
          time_formatted: >
            {% set t = state_attr('sensor.landroid_blawn_status', 'blade_time') | int %}
            {% if t != 0 %}
              {{ '%0d d %0.02d h %0.02d min' | format(t // 1440, ((t % 1440) // 60), t % 60) }}
            {% endif %}
        icon_template: mdi:fan
        unit_of_measurement: "min"

      landroid_totaltime:
        friendly_name: Landroid Total Time
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'work_time') }}"
        attribute_templates:
          time_formatted: >
            {% set t = state_attr('sensor.landroid_blawn_status', 'work_time') | int %}
            {% if t != 0 %}
              {{ '%0d d %0.02d h %0.02d min' | format(t // 1440, ((t % 1440) // 60), t % 60) }}
            {% endif %}
        icon_template: mdi:bus-clock
        unit_of_measurement: "min"

      landroid_dist:
        friendly_name: Landroid Distance
        value_template: "{{ (state_attr('sensor.landroid_blawn_status', 'distance') | float) / 1000 }}"
        icon_template: mdi:map-marker-distance
        unit_of_measurement: "km"

      landroid_lastupdate:
        friendly_name: Landroid last update
        value_template: "{{ as_timestamp(strptime( state_attr('sensor.landroid_blawn_status', 'last_update'), '%H:%M:%S %d/%m/%Y')) | timestamp_custom('%d.%m.%Y %H:%M:%S') }}"
        icon_template: mdi:clock

      landroid_wifi:
        friendly_name: Landroid WIFI Quality
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'rssi') }}"
        icon_template: >-
          {% set strength = state_attr('sensor.landroid_blawn_status', 'rssi') | float -%}
          {%- if strength > -56 -%}mdi:wifi-strength-4
          {% elif strength > -67 -%}mdi:wifi-strength-3
          {% elif strength > -78 -%}mdi:wifi-strength-2
          {% elif strength > -89 -%}mdi:wifi-strength-1
          {%- else -%}mdi:wifi-strength-outline
          {%- endif %}
        unit_of_measurement: "dBm"

      landroid_yaw:
        friendly_name: Landroid Yaw
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'yaw') }}"
        icon_template: mdi:axis-z-rotate-clockwise
        unit_of_measurement: "°"

      landroid_roll:
        friendly_name: Landroid Roll
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'roll') }}"
        icon_template: mdi:axis-x-rotate-clockwise
        unit_of_measurement: "°"

      landroid_pitch:
        friendly_name: Landroid Pitch
        value_template: "{{ state_attr('sensor.landroid_blawn_status', 'pitch') }}"
        icon_template: mdi:seat-flat-angled
        unit_of_measurement: "°"
################################################
## Input Number
################################################
input_number:
  landroid_raindelay:
    name: Rain delay
    initial: 150
    min: 0
    max: 300
    step: 30
    unit_of_measurement: "min"
    icon: mdi:weather-lightning-rainy

  landroid_timeextension:
    name: Time extension
    initial: 0
    min: -100
    max: 100
    step: 10
    unit_of_measurement: "%"
    icon: mdi:clock-out
################################################
## Input Boolean
################################################
input_boolean:
  landroid_sched_settings:
    name: Scheduler settings
    icon: mdi:file-hidden
    initial: false
  landroid_info_toggle:
    name: Info toggle
    icon: mdi:file-hidden
    initial: false
################################################
## Automation
################################################
automation:
# Status notificaion
  - id: landroid_notify_status
    alias: Landroid Notify Status
    initial_state: false
    trigger:
    - platform: state
      entity_id: sensor.landroid_blawn_status

    condition:
    - condition: template
      value_template: "{{ trigger.to_state.state != trigger.from_state.state }}"

    action:
    - service: persistent_notification.create
      data_template:
        title: 🏎️ Landroid
        message: "*{{ trigger.to_state.state }}* <- {{ trigger.from_state.state }} - {{ states('sensor.date_time') }}"

# Error notificaion
  - id: landroid_notify_error
    alias: Landroid Notify Error
    initial_state: false
    trigger:
    - platform: state
      entity_id: sensor.landroid_blawn_error

    condition:
    - condition: template
      value_template: "{{ trigger.to_state.state != trigger.from_state.state }}"

    action:
    - service: persistent_notification.create
      data_template:
        title: 🏎️ Landroid
        message: "*{{ trigger.to_state.state }}* <- {{ trigger.from_state.state }} - {{ states('sensor.date_time') }}"

# Sync Landroid states
  - id: landroid_sync_values
    alias: Landroid sync values
    trigger:
      platform: state
      entity_id: sensor.landroid_lastupdate

    action:
# Get rain delay
      - service: input_number.set_value
        data_template:
          entity_id: input_number.landroid_raindelay
          value: "{{ state_attr('sensor.landroid_blawn_status','raindelay') | int }}"
# Get time extension
      - service: input_number.set_value
        data_template:
          entity_id: input_number.landroid_timeextension
          value: "{{ state_attr('sensor.landroid_blawn_status','timeextension') | int }}"
################################################
## Script
################################################
script:
# Starts the mower
  landroid_start:
    alias: Landroid Start
    sequence:
      service: landroid_cloud.start
      data_template:
        id: "{{ state_attr('sensor.landroid_blawn_status','id') }}"

# Stops the mower and sends it home
  landroid_home:
    alias: Landroid Home
    sequence:
      service: landroid_cloud.home
      data_template:
        id: "{{ state_attr('sensor.landroid_blawn_status','id') }}"

# Pause the mower
  landroid_pause:
    alias: Landroid Pause
    sequence:
      service: landroid_cloud.pause
      data_template:
        id: "{{ state_attr('sensor.landroid_blawn_status','id') }}"

# Set rain delay and time extension
  landroid_set_config:
    alias: Landroid set config
    sequence:
      service: landroid_cloud.config
      data_template:
        id: "{{ state_attr('sensor.landroid_blawn_status','id') }}"
        raindelay: "{{ states('input_number.landroid_raindelay') | int }}"
        timeextension: "{{ states('input_number.landroid_timeextension') | int }}"

Lovelace

  - badges: []
    cards:
      - elements:
          - entity: sensor.landroid_wifi
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              left: 0%
              opacity: 1
              top: 0%
              transform: none
            title: WLAN Qualität
            type: state-icon
          - entity: sensor.landroid_wifi
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              left: 9%
              opacity: 1
              top: 1%
              transform: none
            title: WLAN Qualität
            type: state-label
          - entity: sensor.landroid_bat
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              opacity: 1
              right: 0%
              top: 0%
              transform: none
            title: Akku Status
            type: state-icon
          - entity: sensor.landroid_blawn_battery
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              opacity: 1
              right: 8%
              top: 1%
              transform: none
            title: Akkuladung
            type: state-label
          - entity: sensor.landroid_blawn_status
            style:
              color: 'rgb(3, 169, 244)'
              font-size: 150%
              font-weight: bold
              left: 0%
              opacity: 1
              top: 7%
              transform: none
            title: Status
            type: state-label
          - entity: sensor.landroid_blawn_error
            style:
              color: 'rgb(3, 169, 244)'
              font-size: 150%
              font-weight: bold
              left: 0%
              opacity: 1
              top: 13%
              transform: none
            title: Status
            type: state-label
          - entity: sensor.landroid_pitch
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              opacity: 1
              right: 0%
              top: 9%
              transform: none
            title: Nicken
            type: state-icon
          - entity: sensor.landroid_pitch
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              opacity: 1
              right: 8%
              top: 10%
              transform: none
            title: Nicken
            type: state-label
          - entity: sensor.landroid_roll
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              opacity: 1
              right: 0%
              top: 18%
              transform: none
            title: Rollen
            type: state-icon
          - entity: sensor.landroid_roll
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              opacity: 1
              right: 8%
              top: 19%
              transform: none
            title: Rollen
            type: state-label
          - entity: sensor.landroid_yaw
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              opacity: 1
              right: 0%
              top: 26%
              transform: none
            title: Gieren
            type: state-icon
          - entity: sensor.landroid_yaw
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              opacity: 1
              right: 8%
              top: 27%
              transform: none
            title: Gieren
            type: state-label
          - entity: sensor.landroid_dist
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              left: 31%
              opacity: 1
              top: 26%
              transform: none
            title: Gesamte Distanz
            type: state-icon
          - entity: sensor.landroid_dist
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              left: 40%
              opacity: 1
              top: 27%
              transform: none
            title: Gesamte Distanz
            type: state-label
          - entity: sensor.landroid_totaltime
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              left: 31%
              opacity: 1
              top: 41%
              transform: none
            title: Gesamte Arbeitszeit
            type: state-icon
          - entity: sensor.landroid_totaltime
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              left: 40%
              opacity: 1
              top: 40%
              transform: none
            title: Gesamte Arbeitszeit
            type: state-label
          - attribute: time_formatted
            entity: sensor.landroid_totaltime
            style:
              color: 'rgb(3, 169, 244)'
              font-size: 10px
              font-style: italic
              font-weight: bold
              left: 40%
              opacity: 1
              top: 45%
              transform: none
            title: Gesamte Arbeitszeit
            type: state-label
          - entity: sensor.landroid_bladetime
            style:
              '--paper-item-icon-color': 'rgb(3, 169, 244)'
              left: 31%
              opacity: 1
              top: 56%
              transform: none
            title: Klingenarbeitszeit
            type: state-icon
          - entity: sensor.landroid_bladetime
            style:
              color: 'rgb(3, 169, 244)'
              font-weight: bold
              left: 40%
              opacity: 1
              top: 55%
              transform: none
            title: Klingenarbeitszeit
            type: state-label
          - attribute: time_formatted
            entity: sensor.landroid_bladetime
            style:
              color: 'rgb(3, 169, 244)'
              font-size: 10px
              font-style: italic
              font-weight: bold
              left: 40%
              opacity: 1
              top: 60%
              transform: none
            title: Klingenarbeitszeit
            type: state-label
          - entity: input_boolean.landroid_sched_settings
            image: /local/mower/timer-off.png
            state_filter:
              'off': brightness(100%) saturate(1)
              'on': brightness(90%) saturate(1)
            state_image:
              'on': /local/mower/timer.png
            style:
              bottom: 4%
              left: 45%
              transform: 'translate(-280%, 25%) scale(0.7, 0.7)'
            tap_action:
              action: toggle
            title: Mähplan
            type: image
          - icon: 'mdi:play'
            style:
              bottom: 4%
              color: 'rgb(250, 250, 250)'
              left: 45%
              transform: 'translate(-260%, 0%) scale(1.6, 1.6)'
            tap_action:
              action: call-service
              service: script.landroid_start
            title: Mähen
            type: icon
          - icon: 'mdi:pause'
            style:
              bottom: 4%
              color: 'rgb(250, 250, 250)'
              left: 45%
              transform: 'translate(0%, 0%) scale(1.6, 1.6)'
            tap_action:
              action: call-service
              service: script.landroid_pause
            title: Pause
            type: icon
          - icon: 'mdi:home'
            style:
              bottom: 4%
              color: 'rgb(250, 250, 250)'
              left: 45%
              transform: 'translate(260%, 0%) scale(1.6, 1.6)'
            tap_action:
              action: call-service
              service: script.landroid_home
            title: Stop & Nach Hause fahren
            type: icon
          - entity: input_boolean.landroid_info_toggle
            image: /local/mower/info-off.png
            state_filter:
              'off': brightness(100%) saturate(1)
              'on': brightness(90%) saturate(1)
            state_image:
              'on': /local/mower/information.png
            style:
              bottom: 4%
              left: 45%
              transform: 'translate(240%, 25%) scale(0.7, 0.7)'
            tap_action:
              action: toggle
            title: Information
            type: image
        image: /local/mower/landroid_flower.png
        type: picture-elements
      - card:
          entities:
            - entity: input_number.landroid_raindelay
            - entity: input_number.landroid_timeextension
            - entity: script.landroid_set_config
          show_header_toggle: false
          title: Konfiguration
          type: entities
        conditions:
          - entity: input_boolean.landroid_sched_settings
            state: 'on'
        type: conditional
      - card:
          entities:
            - entities:
                - attribute: firmware_version
                  entity: sensor.landroid_blawn_status
                  icon: 'mdi:information-variant'
                  name: Firmware
                  type: attribute
              head: sensor.landroid_lastupdate
              type: 'custom:fold-entity-row'
            - label: Konfiguration
              type: section
            - attribute: raindelay
              entity: sensor.landroid_blawn_status
              icon: 'mdi:weather-lightning-rainy'
              name: Regenverzögerung
              suffix: min
              type: attribute
            - attribute: timeextension
              entity: sensor.landroid_blawn_status
              icon: 'mdi:clock'
              name: Daueranpassung
              suffix: '%'
              type: attribute
            - entities:
                - entity: automation.landroid_notify_error
                - entity: automation.landroid_notify_status
                - entity: automation.landroid_sync_values
              head:
                label: Automatisierungen
                type: section
              type: 'custom:fold-entity-row'
          show_header_toggle: false
          title: Information
          type: entities
        conditions:
          - entity: input_boolean.landroid_info_toggle
            state: 'on'
        type: conditional
    path: garden
    title: Garten

@jakob.tewes Jakob, big thanks!!! works almost all:
image

No images (background and icons) from / local / mower / are displayed

What could be wrong?

FIX: wrong path to
image
should be : www/mower/