Skip to content

Instantly share code, notes, and snippets.

@techman83
Created December 12, 2021 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save techman83/45ed4f6de5ff4df0a2de036e33aab0f1 to your computer and use it in GitHub Desktop.
Save techman83/45ed4f6de5ff4df0a2de036e33aab0f1 to your computer and use it in GitHub Desktop.
Berry Script Roomba iRobot 500 driver for Tasmota
import string
class ROOMBA500 : Driver
var serial
var initialised
var state
var mv
var current
var temp
var charge
var capacity
var last_msg
def init()
self.serial = serial(4, 5, 115200, serial.SERIAL_8N1)
self.restart()
end
def start()
self.serial.write(128)
self.initialised = true
end
def restart()
self.initialised = false
self.serial.write(7)
var count = 1
while count < 100
tasmota.delay(50)
tasmota.yield()
count = count + 1
end
self.start()
end
def clean()
self.serial.write(130)
tasmota.delay(20)
self.serial.write(135)
end
def dock()
self.serial.write(130)
tasmota.delay(20)
self.serial.write(143)
end
def sensors()
self.serial.write(142)
tasmota.delay(10)
self.serial.write(3)
tasmota.delay(10)
end
def process_packet()
self.state = self.last_msg.get(0,1)
self.mv = self.last_msg.get(1,-2)
self.current = self.last_msg.geti(3,-2)
self.temp = self.last_msg.geti(5,-1)
self.charge = self.last_msg.get(6,-2)
self.capacity = self.last_msg.get(8,-2)
end
def every_100ms()
if !self.initialised return nil end
if self.serial.available() == 0
return
end
var msg = self.serial.read()
if msg || size(msg) > 0
self.last_msg = msg
end
end
def every_second()
if !self.initialised return nil end
if self.last_msg && size(self.last_msg) == 10
self.process_packet()
end
self.sensors()
end
def web_sensor()
if !self.initialised return nil end
var msg = string.format(
"{s}State{m}%s{e}"..
"{s}Battery Voltage{m}%s mV{e}"..
"{s}Charge/Discharge{m}%s mA{e}"..
"{s}Roomba Temperature{m}%s °C{e}"..
"{s}Battery{m}%s mAH{e}",
self.state, self.mv, self.current, self.temp,
self.charge
)
tasmota.web_send(msg)
end
def json_append()
if !self.initialised return nil end
var msg = string.format(
",\"iRobot530\":{\"State\":\"%s\",\"BatteryVoltage\":\"%s\",\"ChargeDischarge\":\"%s\",\"Temperature\":\"%s\",\"Battery\":\"%s\"}",
self.state, self.mv, self.current, self.temp, self.charge
tasmota.response_append(msg)
end
end
roomba500 = ROOMBA500()
tasmota.add_driver(roomba500)
def roomba_restart()
roomba500.restart()
tasmota.resp_cmnd_done()
end
def roomba_clean()
roomba500.clean()
tasmota.resp_cmnd_done()
end
def roomba_dock()
roomba500.dock()
tasmota.resp_cmnd_done()
end
def roomba_last_msg()
tasmota.resp_cmnd_str(roomba500.last_msg)
end
tasmota.add_cmd('RoombaRestart', roomba_restart)
tasmota.add_cmd('RoombaClean', roomba_clean)
tasmota.add_cmd('RoombaDock', roomba_dock)
@fbrnc
Copy link

fbrnc commented Apr 8, 2022

I think there's a ) missing in Line 101

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment