Roomba Home Automation with OpenHAB
Hello, i will share with you a example of controlling my Roomba with OpenHAB. The module used with the Roomba is RooWiFI.
Here is the OpenHAB config i used for this example(Just replace the IP_ADDRESS with the IP address of your RooWifi module):
Rules
var String Roomba_IP = "http://admin:roombawifi@IP_ADDRESS/"
var String myROOMBA_CLEAN = "rwr.cgi?exec=4"
var String myROOMBA_STOP = "rwr.cgi?exec=6"
var String myROOMBA_DOCK = "rwr.cgi?exec=6"
var String myROOMBA_OFF = "rwr.cgi?exec=7"
var String myROOMBA_ON = "rwr.cgi?exec=10"
//#####roomba clean
rule "Roomba Clean"
when Item Roomba_Clean changed to ON
then
var String url
var String tmp
var Integer timeout
postUpdate(Roomba_Dock,OFF)
postUpdate(Roomba_Clean,OFF)
postUpdate(Roomba_Stop,OFF)
url = Roomba_IP + myROOMBA_OFF
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule”,"URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
url = Roomba_IP + myROOMBA_ON
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
url = Roomba_IP + myROOMBA_CLEAN
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
else
postUpdate(Roomba_Clean,OFF)
end
//#####roomba dock
rule "Roomba Dock"
when
Item Roomba_Dock changed to ON
then
var String url
var String tmp
var Integer timeout
postUpdate(Roomba_Dock,OFF)
postUpdate(Roomba_Clean,OFF)
postUpdate(Roomba_Stop,OFF)
url = Roomba_IP + myROOMBA_OFF
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
url = Roomba_IP + myROOMBA_ON
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
url = Roomba_IP + myROOMBA_DOCK
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
else
postUpdate(Roomba_Dock,OFF)
end
//#####Roomba Battery status
rule "Roomba baterija"
when
Item roomba_b_capacity received update
then
var Integer baterija
var Integer ukupno=roomba_b_capacity.state as DecimalType
var Integer kapacitet=roomba_b_charge.state as DecimalType
baterija=(kapacitet/ukupno)*100
roomba_capacity_percent.postUpdate(baterija)
end
//#####roomba stop
rule "Roomba Stop"
when
Item Roomba_Stop changed to ON
then
var String url
var String tmp
var Integer
timeout
postUpdate(Roomba_Dock,OFF)
postUpdate(Roomba_Clean,OFF)
postUpdate(Roomba_Stop,OFF)
url = Roomba_IP + myROOMBA_OFF
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
url = Roomba_IP + myROOMBA_ON
timeout = 0
tmp = sendHttpGetRequest(url)
logInfo("rule","URL: " + url + " –> " + tmp)
while (!tmp.contains("1") && timeout < 10)
{
tmp = sendHttpGetRequest(url)
Thread::sleep(5000)
tmp = sendHttpGetRequest(url)
logInfo("rule","(timeout=" + timeout + ") " + url + " –> " + tmp)
timeout = timeout + 1
}
Sitemap
Text label="Usisavač (Roomba)" icon="roomba" { Frame label="Upravljanje" {
Switch item=Roomba_Clean label="Čišćenje" mappings=[ON="Start"] icon="roomba"
Switch item=Roomba_Dock label="Punjenje" mappings=[ON="Start"] icon="roomba"
Switch item=Roomba_Stop label="Stop" mappings=[ON="Stop"] icon="roomba"
}
Frame label="Status"
{
Text item=roomba_charging_state label="Status [MAP(roomba.map):%s]" icon="roomba"
Text item=roomba_voltage label="Napon baterije[%.0f mV]" icon="battery" visibility=[roomba_charging_state!="10"] valuecolor=[>13000="green",<13000="red"]
Text item=roomba_current label="Struja [%.0f mA]" icon="voltage" visibility=[roomba_charging_state!="10"] valuecolor=[>0="green",<0="red"]
Text item=roomba_b_capacity label="Maksimalni kapacitet [%.0f mAh]" icon="battery" visibility=[roomba_charging_state!="10"]
Text item=roomba_b_charge label="Trenutni kapacitet [%.0f mAh]" icon="battery" visibility=[roomba_charging_state!="10"] valuecolor=[>1348="green",<1348="orange"]
Text item=roomba_capacity_percent label="Stanje baterije [%.0f %%]" icon="battery" visibility=[roomba_charging_state!="10"] valuecolor=[>50="green",<50="red"]
}}
Items
Switch Roomba_Clean // cleaning
Switch Roomba_Dock // dock
Switch Roomba_Stop // stop
Number roomba_voltage (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?(.*?) .*)]"}
Number roomba_temperature (grp_roomba)
Number roomba_charging_state (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?(.*?) .*)]"}
Number roomba_current (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?(.*?) .*)]"}
Number roomba_b_charge (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?(.*?) .*)]"}
Number roomba_b_capacity (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?(.*?) .*)]"}
Number roomba_capacity_percent (grp_roomba)
Hello, try loading this configuration in Openhab 2 without success (placing the configuration files in the path / etc / openhab2 and their respective folder), is there any extra step that I am missing?
se puede conectar a google home?
Yes
Hello,
i’m trying to use it with openhab 2.4 and it looks like it not compatible with it.
do you have new version?
Hi, im currently using it with OpenHAB 2.4.. It should be compatible.