In diesem Tutorial zeigen wir euch, wie Ihr euren ThinkingCleaner in euer Fibaro HomeCenter 2 einbindet und euren Roomba automatisiert auf die Reise schickt :)
Den ThinkingCleaner Aufsatz gibt es für die Roomba-Serie 500/600 und wie Ihr alles einrichtet haben wir euch in einem älteren Artikel bereits erläutert. Diesen Artikel findet Ihr hier.
Der virtuelle ThinkingCleaner
Bevor Ihr mit dem Import des VD losgeht, müsst Ihr euch 2 Variablen erstellen. Geht dazu bitte unter "Panels", "Variables Panel" und erstellt dort bitte die Variablen "VDroombaAkku" & "VDroombaState". Diese benötigt Ihr, um später den Roomba in Szenen zu nutzen.
Wenn Ihr euren Roomba bereits mit dem ThinkingCleaner-Faceplate versehen habt und diesen ordnungsgemäß mit eurem WLAN verbunden habt, dann könnt Ihr euch das virtuelle device hier herunterladen und in euer HomeCenter 2 importieren (Dazu müsst Ihr über "Add/Remove device" das roomba_vd.vfib importieren).
Hier müsst Ihr nun unter dem Punkt "IP Address" die IP eures ThinkingCleaner eintragen und unter dem Punkt "TCP Port" müsst Ihr die 80 eintragen. Sofern Ihr alles richtig konfiguriert habt, sollte nach einem Klick auf das "ℹ" das VD aktualisieren.
Damit habt Ihr die Konfiguration auch schon abgeschlossen. Ihr könnt euch noch das passende Icon für das VD uploaden und dem device hinzufügen:
Euch stehen nun 7 Tasten zur Verfügung, mit denen Ihr euren ThinkingCleaner steuern könnt:
- ℹ : Aktualisierung des Status und des Akku-Status
- ♫ : Spielt einen Ton ab, um den Roomba zu wieder zu finden
- ♲ : Startet einen normalen Reinigungsvorgang
- ♻ : Startet einen maximalen Reinigungsvorgang (höherer Akkuverbrauch)
- ♽ : Startet einen Spot-Reinigungsvorgang
- ⚡ : Sucht die Homebase und dockt an
- ⌚ : Startet einen zeitverzögerten Reinigungsvorgang (kann über das WebInterface des ThinkingCleaner konfiguriert werden)
Die Variable "VDroombaState" kann folgende Stati annehmen:
- st_base = Auf Dock. Wird nicht geladen
- st_base_recon = Auf Dock. Recondition Charge
- st_base_full = Auf Dock. Wird geladen
- st_base_trickle = Auf Dock. Erhaltungsladung
- st_base_wait = Auf Dock. Wartend
- st_plug = Plugged in: Wird nicht geladen
- st_plug_recon = Plugged in: Recondition Charge
- st_plug_full = Plugged in: Wird geladen
- st_plug_trickle = Plugged in: Erhaltungsladung
- st_plug_wait = Plugged in: Wartend
- st_stopped = Gestoppt
- st_clean = Reinigend
- st_cleanstop = Gestoppt
- st_clean_spot = Spot-Reinigend
- st_clean_max = Max-Reinigend
- st_delayed = Delay-Reinigung
- st_dock = Suche Homebase
- st_pickup = Roomba hochgenommen
- st_remote = Fernsteuerung
- st_wait = Wartend
- st_off = Off
- st_error = Error
- st_locate = Find mich
- st_unknown = Status unbekannt. WLan-Verbindung verloren?
Ihr könnt euch jetzt zum Beispiel eine Szene erstellen, dass der Roomba automatisch losfährt und eure Wohnung saugt, wenn Ihr
- a) nicht zu Hause seid,
- b) der Roomba im Laufe das Tages noch nicht die Homebase verlassen hat und
- c) der Akku eine Kapazität von über 90 % hat.
Dazu müsst Ihr euch noch 2 weitere Variablen erstellen. Zum einen die Variable "home_status" (sofern eine vergleichbare Variable noch nicht existiert; 0 = keiner zu Hause, 1 = Jemand zu Hause) und zum anderen "roomba_cleaned" (Diese wird auf 1 gesetzt, wenn der Roomba eure Wohnung gereinigt hat).
Wir stellen euch hier eine Szene zur Verfügung, welche alle 60 Sekunden die gegebenen Bedingungen (home_status, roomba_cleaned & VDroombaAkku) prüft. Sofern alle Bedingungen passen, wird der Roomba zu einer normalen Reinigungsfahrt geschickt. Sollte während eines Reinigungsgang jemand nach Hause kommen oder die Akkukapazität unter 20% fallen, wird der Roomba wieder zur Homebase geschickt. In dem Skript müsst Ihr die Zeile 12 anpassen. Dort müsst Ihr die ID eures VD eintragen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
--[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); fibaro:debug('Zeitgesteuerte Szene zum Überprüfen des Roomba erstmalig gestartet'); function roomba() fibaro:debug('Neuer Check der Bedingungen'); local roombaID = 159; if (tonumber(fibaro:getGlobalValue("home_status")) == 0 and tonumber(fibaro:getGlobalValue("VDroombaAkku")) > 90 and tonumber(fibaro:getGlobalValue("roomba_cleaned")) == 0) then fibaro:debug('Alle Bedingungen erfüllt... Roomba fährt los.'); fibaro:call(roombaID, "pressButton", "8"); elseif (tonumber(fibaro:getGlobalValue("home_status")) == 1 and fibaro:getGlobalValue("VDroombaState") == 'st_clean') then fibaro:debug('Roomba reinigt... Es ist jemand nach Hause gekommen... Suche Homebase'); fibaro:call(roombaID, "pressButton", "11"); elseif (fibaro:getGlobalValue("VDroombaState") == 'st_clean' and tonumber(fibaro:getGlobalValue("VDroombaAkku")) < 20) then fibaro:debug('Roomba reinigt... Akku ist fast leer... Suche Homebase'); fibaro:call(roombaID, "pressButton", "11"); end setTimeout(roomba, 60*1000); end if (sourceTrigger["type"] == "autostart") then roomba(); end |
Die Variable "roomba_cleaned" könnt Ihr jeden Tag um 00:00 Uhr mit folgender Szene zurücksetzten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
--[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); fibaro:debug('Start'); function reset() local resetHour = '00:00'; local currentDate = os.date("*t"); if ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == resetHour))) then fibaro:debug('Roomba-Status resetet...'); fibaro:setGlobal("roomba_cleaned", "0"); end setTimeout(reset, 60*1000); end if (sourceTrigger["type"] == "autostart") then reset(); end |
Um den Status des Roombas regelmäßig zu aktualisieren müsst Ihr euch noch ein Skript anlegen, welches in einem 60-Sekunden-Takt den Info-Knopf des VD pressed. So ist gewährleistet, dass der Status immer aktuell ist:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
--[[ %% properties %% autostart %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do fibaro:debug('Refresh status.') fibaro:call(roombaID, "pressButton", "1") fibaro:sleep(60*1000) fibaro:debug('Status refreshed') end end |
Das war es dann auch schon. :) Es gibt sicherlich noch viele weitere Möglichkeiten. Es könnte zum Beispiel eine Push geschickt werden, wenn sich der Roomba irgendwo festgefahren hat. Wir würden uns über euere Ideen in den Kommentaren freuen. Vielleicht können wir ja einen weiteren Artikel zu dem ThinkingCleaner schreiben, in dem wir eure Ideen umsetzen.
Hier seht Ihr das Video, welches Chriss damals beim Test des ThinkingCleaner erstellt hat:
[youtube url="https://www.youtube.com/watch?v=9TfvgORKnTs" hd="1"]