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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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") &amp;&amp; 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</p>
Number roomba_voltage (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?<r15>(.*?)</r15>.*)]"}
Number roomba_temperature (grp_roomba)
Number roomba_charging_state (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?<r14>(.*?)</r14>.*)]"}
Number roomba_current (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?<r16>(.*?)</r16>.*)]"}
Number roomba_b_charge (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?<r18>(.*?)</r18>.*)]"}
Number roomba_b_capacity (grp_roomba) { http="<[http://admin:roombawifi@IP_ADDRESS/rwr.xml:5000:REGEX(.*?<r19>(.*?)</r19>.*)]"}
Number roomba_capacity_percent (grp_roomba)
Vanja Vršić

Facebook YouTube 

Tagged with: , , ,
5 comments on “Roomba Home Automation with OpenHAB
  1. Felipe Para says:

    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. martin says:

    se puede conectar a google home?

  3. Efi says:

    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 *

*