ich habe mir vor einigen Tagen ein neues Spielzeug zugelegt und direkt mal in openHAB eingebunden.
Wichtig vorweg: Der Roborock muss mit der Xiaomi MiHome App verwendet werden. Wenn er über die Roborock App verwendet wird, dann kann das Xiaomi Mi IO Binding nicht mit dem Roborock "sprechen"
Und so sieht die Konfig aus:
ITEMS:
Code: Alles auswählen
/* ------------- Xiaomi Roborock --------------------
*/
// Gruppen
Group gRoborockVac "Roborock S6 MaxV" <s6max> (gSystem) ["Equipment"]
Group gRoborockVacStat "Gerätezustand" <status> (gRoborockVac)
Group gRoborockVacUsage "Wartung / Verbrauchsmaterial" <line-increase> (gRoborockVac)
Group gRoborockVacDND "Nicht-Stören Einstellungen" <moon> (gRoborockVac)
Group gRoborockVacHistory "Reinigungsverlauf" <calendar> (gRoborockVac)
Group gRoborockVacNetwork "Netzwerk Details" <network> (gRoborockVac)
Group:Switch:OR(ON,OFF) gRoborockVacRooms "Räume" <network> (gRoborockVac)
// Räume
Switch RoborockVacRoom1 "Wohnzimmer saugen" <sofa> (gRoborockVacRooms)
Switch RoborockVacRoom2 "Badezimmer saugen" <bath> (gRoborockVacRooms)
Switch RoborockVacRoom3 "Flur saugen" <corridor> (gRoborockVacRooms)
Switch RoborockVacRoom4 "Schlafzimmer saugen" <bedroomadult> (gRoborockVacRooms)
Switch RoborockVacRoom5 "Küche saugen" <kitchen> (gRoborockVacRooms)
Switch RoborockVacRoom6 "Gästeklo saugen" <toilet> (gRoborockVacRooms)
Switch RoborockVacRoom7 "Büro saugen" <office> (gRoborockVacRooms)
//Control
String RoborockVac_Control "Steuerung" <s6max> (gRoborockVac) {channel="miio:vacuum:XXXXXXX:actions#control"}
Number RoborockVac_Fan "Saugleistung [MAP(roborock_status.map):%s]" <s6max> (gRoborockVac) {channel="miio:vacuum:XXXXXXX:actions#fan"}
String RoborockVac_Command "Robo Befehl" <s6max> (gRoborockVac) {channel="miio:vacuum:XXXXXXX:actions#commands"} //actionCommand.sendCommand("get_room_mapping") /
String RoborockVac_Segment "Einzelraumreinigung" <s6max> (gRoborockVac) {channel="miio:vacuum:XXXXXXX:actions#segment"} //{\"result\":[[18,\"169001026039\"],[21,\"169001026079\"],[22,\"169001026081\"],[16,\"169001026082\"],[17,\"169001026078\"],[19,\"169001026080\"],[20,\"169001026083\"]],\"id\":12298}"
Switch RoborockVac_Test "Test" <s6max> (gRoborockVacStat)
//Status
String RoborockVac_State "Status:[MAP(roborock_status.map):%s]" <chart> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#state"}
Number RoborockVac_StateID "Status ID: [%s]" <chart> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#state_id"}
Number RoborockVac_Battery "Battery Level [%1.0f %%]" <battery> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#battery"}
Number RoborockVac_Area "Gereinigte Fläche [%1.0f m²]" <zoom> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#clean_area"}
Number RoborockVac_Time "Reinigungszeit [%1.0f Min.]" <time> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#clean_time"}
String RoborockVac_Error "Fehler: [MAP(roborock_error.map):%s]" <error> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#error_code"}
Number RoborockVac_ErrorID "Fehler ID: [MAP(roborock_error.map):%s]" <error> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#error_id"}
Number RoborockVac_FanPower "Saugleistung [MAP(roborock_status.map):%s]" <fan> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#fan_power"}
Number RoborockVac_CleanStats "Reinigungsstatus [%1.0f]" <switch> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#in_cleaning"}
Switch RoborockVac_DND "DND aktiviert" <switch> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#dnd_enabled"}
Switch RoborockVac_Mop "Mop Forbidden" <status> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#mop_forbidden_enable"}
Switch RoborockVac_WaterBoxState "Wassertank montiert" <water> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#water_box_status"}
Switch RoborockVac_LockState "Lock State" <status> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#lock_status"}
Number RoborockVac_WaterBoxMode "Wassermenge [MAP(roborock_status.map):%s]" <water> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#water_box_mode"}
Switch RoborockVac_WaterBoxCState "carriage mounted" <water> (gRoborockVacStat) {channel="miio:vacuum:XXXXXXX:status#water_box_carriage_status"}
//Verbrauch
Number RoborockVac_MainT "Hauptbürste tauschen in [%1.0f Std.]" <line-increase> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#main_brush_time"}
Number RoborockVac_MainP "Hauptbürste [%1.0f %%]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#main_brush_percent"}
Number RoborockVac_SideT "Seitenbürste tauschen in [%1.0f Std.]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#side_brush_time"}
Number RoborockVac_SideP "Seitenbürste [%1.0f %%]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#side_brush_percent"}
Number RoborockVac_FilterT "Filter tauschen in [%1.0f Std.]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#filter_time"}
Number RoborockVac_FilterP "Filter [%1.0f %%]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#filter_percent"}
Number RoborockVac_SensorT "Sensor reinigen in [%1.0f Std.]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#sensor_dirt_time"}
Number RoborockVac_SensorP "Sensor [%1.0f%%]" <line-decrease> (gRoborockVacUsage) {channel="miio:vacuum:XXXXXXX:consumables#sensor_dirt_percent"}
//DND - Do not Disturb
Switch RoborockVac_DND_Function "DND Funktion" <moon> (gRoborockVacDND) {channel="miio:vacuum:XXXXXXX:dnd#dnd_function"}
String RoborockVac_DND_Start "DND Startzeit [%s] Uhr" <time> (gRoborockVacDND) {channel="miio:vacuum:XXXXXXX:dnd#dnd_start"}
String RoborockVac_DND_End "DND Endzeit [%s] Uhr" <time-on> (gRoborockVacDND) {channel="miio:vacuum:XXXXXXX:dnd#dnd_end"}
// Statistik
Number RoborockVac_HistArea "Gereinigte Fläche (Gesamt) [%1.0f m²]" <zoom> (gRoborockVacHistory) {channel="miio:vacuum:XXXXXXX:history#total_clean_area"}
Number RoborockVac_HistTime "Reinigungszeit (Gesamt) [%1.0f Min.]" <time> (gRoborockVacHistory) {channel="miio:vacuum:XXXXXXX:history#total_clean_time"}
Number RoborockVac_HistCount "Reinigungsvorgänge [%1.0f]" <office> (gRoborockVacHistory) {channel="miio:vacuum:XXXXXXX:history#total_clean_count"}
// Cleaning Details
DateTime RoborockVac_CleanLastStart "Letzte Ausführung (Start) [%1$td.%1$tm %1$tH:%1$tM Uhr]" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_start_time"}
DateTime RoborockVac_CleanLastEnd "Letzte Ausführung (Ende) [%1$td.%1$tm %1$tH:%1$tM Uhr]" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_end_time"}
Number:Area RoborockVac_CleanLastArea "Letzte gereiniget Fläche" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_area"}
Number:Time RoborockVac_CleanLastDuration "Dauer der letzten Reinigung" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_duration"}
Number RoborockVac_CleanLastError "Letzer Fehler" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_error"}
Number RoborockVac_CleanLastFinish "Finish" <time> {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_finish"}
Image RoborockVac_CleanMap "MAP" <map> {channel="miio:vacuum:XXXXXXX:cleaning#map"}
//Netzwerk
String RoborockVac_NetSSID "Network SSID [%s]" <network> (gRoborockVacNetwork) {channel="miio:vacuum:XXXXXXX:network#ssid"}
String RoborockVac_NetBSSID "Network BSSID [%s]" <network> (gRoborockVacNetwork) {channel="miio:vacuum:XXXXXXX:network#bssid"}
Number RoborockVac_NetRSSI "Network RSSI [%1.0f]" <network> (gRoborockVacNetwork) {channel="miio:vacuum:XXXXXXX:network#rssi"}
Number RoborockVac_NetLife "Uptime [%1.0f]" <time> (gRoborockVacNetwork) {channel="miio:vacuum:XXXXXXX:network#life"}
roborock_error.map
Code: Alles auswählen
0=keine Fehler
1=Fehler Laserdistanzsensor
2=Fehler Kollisionssensor
3=Räder ohne Haftung
4=Fehler Absturzsensors
5=Hauptbürste blockert
6=Seitenbürste blockiert
7=Räder blockiert
8=Staubsauger festgefahren
9=Staubbehälter fehlt
10=Filter blockiert
11=Magnetisches Feld erkannt
12=Akkustand niedrig
13=Ladefehler
14=Akkufehler
15=Wandsensoren verschmutzt
16=Unebene Oberfläche
17=Fehler Seitenbürste
18=Fehler Sauggebläse
19=Ladestation ohne Strom
20=Unknown Error
21=Fehler Laserdrucksensor
22=Fehler Ladesensor
23=Problem beim andocken
24=No-go zone or invisible wall detected
254=Staubbehälter voll
255=Internal error
-1=Unknown Error
No\ error=keine Fehler
Laser\ distance\ sensor\ error=Fehler Laserdistanzsensor
Collision\ sensor\ error=Fehler Kollisionssensor
Wheels\ on\ top\ of\ void,\ move\ robot=Räder ohne Haftung, Roboter bewegen
Clean\ hovering\ sensors,\ move\ robot=Schwebesensoren reinigen
Clean\ main\ brush=Hauptbürste reinigen
Clean\ side\ brush=Seitenbürste reinigen
Main\ wheel\ stuck?=Hauptrad blockiert?
Device\ stuck,\ clean\ area=Staubsauger festgefahren
Dust\ collector\ missing=Staubbehälter fehlt
Clean\ filter=Filter reinigen
Stuck\ in\ magnetic\ barrier=in Magnetschranke festgefahren
Low\ battery=Akkustand niedrig
Charging\ fault=Ladefehler
Battery\ fault=Akkufehler
Wall\ sensors\ dirty,\ wipe\ them=Wandsensoren verschmutzt
Place\ me\ on\ flat\ surface=auf flachem Untergrund platzieren
Side\ brushes\ problem,\ reboot\ me=Fehler Seitenbürste
Suction\ fan\ problem=Fehler Sauggebläse
Unpowered\ charging\ station=Ladestation ohne Strom
Unknown\ Error=unbekannter Fehler
Unknown=unbekannt ⁉
NULL=unbekannt ⁉
-=-Fehler bei der Initialisierung-
Code: Alles auswählen
0=abgebrochen ✘
1=erledigt ✔
101=Leise
102=Normal
103=Turbo
104=Max
105=Gentle
106=Benutzerdef.(Auto)
-1=(Auto)
200=aus ✘
201=wenig
202=mittel
203=viel
204=Benutzerdef.(Auto)
Idle=Standby…
Sleeping=Ruhemodus
Cleaning=Aktiv ⤨
Paused=Pause
Returning\ Dock=FERTIG ✔
Charging=Aufladen ↻
Charging\ Error=Ladefehler ✘
Initiating=Initiiere
Remote\ Control=Fernbedienung
Manual\ Mode=manueller Modus
Charging\ Error=Ladefehler
Spot\ Cleaning=punktuelle Reinigung
In\ Error=Fehler
Shutting\ Down=Herunterfahren
Updating=Aktualisierung
Docking=Andocken
Zone\ Clean=Zonenreinigung
Room\ Clean=Raumreinigung
Full=Voll
Fully\ Charged=Voll
Unknown=unbekannt ⁉
NULL=unbekannt ⁉
-=-Fehler bei der Initialisierung-
//0 unbekannt ⁉
//1 Initiiere
2=Ruhemodus
3=Standby…
4=Fernbedienung
5=Aktiv ⤨
6=FERTIG ✔
7=manueller Modus
8=Aufladen ↻
9=Ladefehler
10=Pause
11=punktuelle Reinigung
12r=Fehler
13=Herunterfahren
14=Aktualisierung
15=Andocken
16=Go To
17=Zonenreinigung
18=Raumreinigung
100=Voll
Code: Alles auswählen
val HashMap<String,String> Raeume = newHashMap("RoborockVacRoom1" -> "app_segment_clean[16]", // Büro
"RoborockVacRoom2" -> "app_segment_clean[17]", // ?
"RoborockVacRoom3" -> "app_segment_clean[18]", // ?
"RoborockVacRoom4" -> "app_segment_clean[19]", // ?
"RoborockVacRoom5" -> "app_segment_clean[20]", // ?
"RoborockVacRoom6" -> "app_segment_clean[21]", // Wohnzimmer
"RoborockVacRoom7" -> "app_segment_clean[22]") // ?
rule "Roborock room cleaning"
when
Item RoborockVac_State changed from "Returning Dock" to "Charging" or // Roboter ist zurück in der Station
Item RoborockVac_Test changed to ON // Testschalter EIN
then
if(gRoborockVacRooms.members.filter[s|s.state == ON].size == 0) { // Letzter Raum schon gesaugt
logInfo("rules", logPrefix + "Alle Räume gesaugt!")
if(RoborockVac_Test.state != OFF) // Falls Schalter nicht OFF
RoborockVac_Test.postUpdate(OFF) // auf OFF
return;
}
val vacRoom = gRoborockVacRooms.members.filter[s|s.state == ON].sortBy[name].head // 1. Element der Liste
//logInfo("rules", logPrefix + "{}. Raum ({}) gewählt",Raeume,vacRoom.name)
val String strRaum = Raeume.get(vacRoom.name) // Variable initialisieren
logInfo("vacuum","Raumzone {} gewählt",strRaum)
logInfo("rules", logPrefix + "Raumzone {} gewählt",strRaum)
RoborockVac_Command.sendCommand(strRaum) // Raum saugen
vacRoom.postUpdate(OFF)
RoborockVac_Test.postUpdate(OFF)
end
SITEMAP:
Code: Alles auswählen
Frame label="Roborock" icon="s6max" {
Text label="Roborock" icon="s6max" {
Frame label="Steuerung" {
Switch item=RoborockVac_Control label="Steuerung []" mappings=[vacuum="Reinigen", pause="Pause",spot="Spot", dock="Laden"]
Switch item=RoborockVac_Fan label="Saugleistung []" mappings=[101="Leise", 102="Normal", 103="Turbo",104="Max", -1="Custom"]
}
Frame label="Status" {
Default item=RoborockVac_CleanLastStart
Default item=RoborockVac_CleanLastEnd
Default item=RoborockVac_CleanLastArea
Default item=RoborockVac_CleanLastDuration
Default item=RoborockVac_Battery
Group item=gRoborockVacStat
Group item=gRoborockVacNetwork
}
Frame label="Einstellungen" {
Group item=gRoborockVacRooms
Group item=gRoborockVacDND
}
Frame label="Statistik" {
Group item=gRoborockVacUsage
Group item=gRoborockVacHistory
}
Frame label="Map"{
Image item=RoborockVac_CleanMap
}
}
}
CYA
Cyrelian