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)

5 Comments on “Roomba Home Automation with OpenHAB

  1. 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?

  2. 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?

Leave a Reply

Your email address will not be published. Required fields are marked *

*