Created
December 12, 2021 07:49
-
-
Save techman83/45ed4f6de5ff4df0a2de036e33aab0f1 to your computer and use it in GitHub Desktop.
Berry Script Roomba iRobot 500 driver for Tasmota
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I think there's a
)
missing in Line 101