Skip to main content

A Python library intended to monitor and control MoeBot robotic lawn mowers.

Project description

pymoebot

A Python library intended to monitor (and control?) the MoeBot robotic lawn mowers.

  • MoeBot are controllable over WiFi via the Tuya protocol, using the Tuya apps on your Apple/Android device.
  • Tested using an S5 model of MoeBot (which is identical to an S10 (and S20??) apart from battery size).
  • A number of other Robot Mowers appear to be physically identical, though it is unconfirmed if they work (or even support WiFi control):
  • This library provides a MoeBot facade to the tinytuya library.
  • The ultimate intent is to have a library that can then be used within Home-Assistant

Goals

History

It was originally intended to utilise the official tuya-iot-python-sdk library but that provided minimal support for the MoeBot. Instead, this library now uses local communication with the MoeBot via the tinytuya library. This does require a little bit of pre-work to identify the LOCAL_KEY for the device so that we can communicate with it.

Regardless of chosen library we are required to have configured a Tuya Cloud project, follow these instructions

Using pymoebot

NOTE: The MoeBot needs to have been activated by adding it to the Tuya/SmartLife app first.

In it's most simplistic use, get an instance of MoeBot, poll for data and then show its attributes.

from pymoebot import MoeBot

moebot = MoeBot('DEVICE_ID', 'IP', 'LOCAL_KEY')
moebot.poll()
print("Battery level: %s%" % moebot.battery)

Alternatively, register as a listener and then start the listening thread on your MoeBot.

from pymoebot import MoeBot

moebot = MoeBot('DEVICE_ID', 'IP', 'LOCAL_KEY')
moebot.add_listener(lambda d: print("Got data: %s", d))
moebot.listen()

# Do some other stuff

moebot.unlisten()

See the examples for further examples of usage.

Communicating with the MoeBot

tinytuya have done all the hard work of communicating with the MoeBot. It is worth sharing my understanding of the specifics about the MoeBot though, since I have made some assumptions and peer-review may be able to identify issues.

The MoeBot (like all other Tuya devices) communicates by way of Tuya Data Points (DPS). Some of these are declared when the mower is queried. Others are provided unsolicited.

import tinytuya

d = tinytuya.Device('DEVICEID', 'DEVICEIP', 'DEVICEKEY')
d.set_version(3.3)
print(d.status())

Will result in:

{'dps': {'6': 100, '101': 'STANDBY', '102': 0, '103': 'MOWER_LEAN', '104': True, '105': 3, '106': 1111, '114': 'AutoMode'}}

Tuya Data Points

DPS Read/Write Values Comment
6 r/w 0-100 'Battery'
101 r
  • STANDBY
  • MOWING
  • CHARGING
  • EMERGENCY
  • LOCKED
  • PAUSED
  • PARK
  • CHARGING_WITH_TASK_SUSPEND
  • FIXED_MOWING
  • ERROR
'Machine Status' Provides state - can't seem to command state using this
102 r 0 'Machine error'
103 r
  • MOWER_LEAN
  • MOWER_EMERGENCY
  • MOWER_UI_LOCKED
  • NO_LOOP_SIGNAL
  • BATTERY_NOT_ENOUGH
    'Machine warning' Provides sub-states for when the mower is in EMERGENCY
    104 r/w True/False 'Rain mode' Should we work in the rain?
    105 r/w 1-99 'work time' How many hours to run for when started manually
    106 r/? 1111 'machine password'
    107 w True/False 'Clear machine appointment' results in a DPS 110 response
    108 w True/False 'Query machine appointment' results in a DPS 110 response
    109 w True/False 'query partition parameters' results in a DPS 113 response
    110 r/w [byte data] 'Report machine appointment'
    111 r/? [byte data] 'error log'
    112 r/w [byte data] 'work log' Report of mower working time after work has completed, contains last 10 logs
    113 r/w [byte data] 'Partition parameters' specifies the zone mowing configuration
    114 r/? AutoMode/?? 'WorkMode'
    115 w
    • StartMowing
    • StartFixedMowing
    • PauseWork
    • ContinueWork
    • CancelWork
    • StartReturnStation
      'Machine Control CMD' used to change mower state

      State Model

      Main States

      The following are the declared states of the MoeBot seen so far. They are signified by a '101' DPS.

      • CHARGING
      • EMERGENCY - the emergency stop button has been pressed (or the device has been tipped/picked up).
      • LOCKED - the device is locked and the PIN is required to do anything.
      • PAUSED - the mowing session has been paused.
      • MOWING
      • CHARGING_WITH_TASK_SUSPEND - currently charging but will go back out to mow.
      • STANDBY - the mower is not mowing and is charged. May or may not be docked.
      • PARK - on the way back to the charging dock.
      • FIXED_MOWING - working in a spiral pattern.

      EMERGENCY States

      The following appear to be sub-states for when the mower is in EMERGENCY state. They are signified by a '103' DPS.

      • MOWER_LEAN
      • MOWER_EMERGENCY
      • MOWER_UI_LOCKED
      • PLACE_INSIDE_STATION
      • BATTERY_NOT_ENOUGH

      Internals

      A Facebook user has opened the main case of the MoeBot and taken photos. Refer to the images captured in the 'internals' folder.

      Project details


      Download files

      Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

      Source Distribution

      pymoebot-0.3.1.tar.gz (7.8 kB view details)

      Uploaded Source

      Built Distribution

      pymoebot-0.3.1-py3-none-any.whl (8.0 kB view details)

      Uploaded Python 3

      File details

      Details for the file pymoebot-0.3.1.tar.gz.

      File metadata

      • Download URL: pymoebot-0.3.1.tar.gz
      • Upload date:
      • Size: 7.8 kB
      • Tags: Source
      • Uploaded using Trusted Publishing? No
      • Uploaded via: twine/5.1.1 CPython/3.9.19

      File hashes

      Hashes for pymoebot-0.3.1.tar.gz
      Algorithm Hash digest
      SHA256 767662b36eef4d31cebb468ed2ca1274f1cb708ed86b04c443087b6bcf61a4e9
      MD5 745ebae2733c823619a0f87eefd4f775
      BLAKE2b-256 e4174417a25a7aea2423e46c7e335d733a33edf4777fc273916844ede159152b

      See more details on using hashes here.

      File details

      Details for the file pymoebot-0.3.1-py3-none-any.whl.

      File metadata

      • Download URL: pymoebot-0.3.1-py3-none-any.whl
      • Upload date:
      • Size: 8.0 kB
      • Tags: Python 3
      • Uploaded using Trusted Publishing? No
      • Uploaded via: twine/5.1.1 CPython/3.9.19

      File hashes

      Hashes for pymoebot-0.3.1-py3-none-any.whl
      Algorithm Hash digest
      SHA256 91dd003913622500c7837f4f36542e3efe339687d95d321b6edc992c252f69e9
      MD5 cb57033c8b51684eab59472a1be2a620
      BLAKE2b-256 a7acd7f46bf80666ce49765f76295a2fc2ff671e6de64f9298e75e9b506ed4fc

      See more details on using hashes here.

      Supported by

      AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page