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"]
Hallo !
danke für diese geniale Zusammenstellung. Nach der Einrichtung funktionierte soweit alles.
Allerdings habe ich das Problem das der Roomba teilweise gar nicht mehr reagiert.
Er stellt sich tod und nimmt keine Befehl mehr entgegen. Die IP Adresse ist im Netzwerk noch angemeldet.
Dies passiert immer wenn er auf seinem Dock steht.
Ich kann den Roomba dann nur noch über der Knopf am Gerät aufwecken.
Kenn jemand dieses Problem ?
Ich verwende einen Roomba 600 und den Thinking Cleaner.
Danke
Markus
Hi,
so ein Problem konnte ich bisher noch nicht feststellen. (Außer als mir mein WLAN abgeraucht ist ;))
Was sagt denn die Status-LED? Blinkt die weiterhin grün? Ist das Modul anpingbar?
Gruß
Hi ! Du schon wieder ... ;-D!
Die Status Lampe des Thinking Cleaner ist grün! Antwortet auch auf meinen Ping Befehl.
Allerding schaltet sich die grüne LED (Ring) des Roombas ab !?
Ich denke der Rommba fällt in eine Art Energiesparmodus ?
Gruß
Hmm... Meiner ist zu jeder Zeit ansprechbar. Wenn die Batterie geladen wird, dann pulsiert die LED des roomba. Wenn Sie voll ist, dann geht sie glaub ich auch aus. Kannst du denn die Weboberfläche von dem ThinkingCleaner-Modul öffnen?
Der Thinking Cleaner ist ansprechbar.
Gibt aber leider die Befehle nicht mehr an den Roomba ;-(
Hi Daniel,
vielen Dank für das Script! Habe zwei Fragen dazu:
1. muss es in Zeile 17 nicht anstatt:
"elseif (tonumber(fibaro:getGlobalValue("home_status")) == 0" eine 1 sein?
2. Wie sollte es theoretisch bei Variablen mit vordefinierten Werten aussehen, wenn die Variable "Anwesenheit" heißt und die werte "Home" und "Away"
Zeile 13: elseif (tonumber(fibaro:getGlobalValue("Anwesenheit")) == Away
Zeile 17: elseif (tonumber(fibaro:getGlobalValue("Anwesenheit")) == Home
Danke für die Hilfe!
Hi,
zu dem Zeitpunkt hatte ich die Variable 'PresentState' noch nicht im Einsatz. Ich bin davon ausgegangen das der Home_Status 1 = Zu Hause & 0 = Nicht zu Hause darstellt. Deshalb würde es mit 0 passen. Wenn niemand zu Hause, dann fahre los.
Ja, sollte so passen.
Gruß
Ja ist richtig das habe ich auch so gesehen, nur sollte dann doch in Zeile 17 der Status "1" (jemand kommt nach Hause) sein, damit der Reinigungsvorgang abgebrochen wird. Oder wo stehe ich auf dem Schlauch?
Weiß nicht, was du meinst... Ist doch so :D
PS: Hab ich geändert...
:-P Dann bin ich beruhigt.
Die Umstellung auf "PresentState" habe ich ans Laufen bekommen, musste noch das "tonumber" entfernen.
Eine Frage bleibt noch, vlt. übersehe ich es noch aber an welcher Stelle wird wird „roomba_cleaned“ auf 1 gesetzt? Müsste das nicht entweder nach Abbruch des Vorgangs wenn jemand nach Hause kommt oder wenn der Akku unter 20% fällt gesetzt werden?
Vielen Dank und Grüße,
MrT
Hi,
das hab ich wahrlich nicht bedacht. :/ Muss auch ehrlicherweise zugeben, dass ich das Skript so nie im Einsatz hatte. Das Skript würde ich auch stand heute so nicht mehr schreiben, vielleicht mach ich mal ein Update. Du hast natürlich Recht, an diesen Stellen müsste der Wert geschrieben werden.
Gruß