an erster Stelle wollte ich mich erst einmal beim Betreiber dieser Seite bedanken. Sehr viele Nützliche Informationen und Vorlagen. Also Danke!
Zu mir und meinem Problem mit dem HC2. Ich bin von meinem genervten 433mhz System zu diesem gewechselt. Vorher lief meine Automation über ein Tablet in der Wand (Blöderweise Hochkant also für das Fibaro App nicht optimal) mithilfe von zich Taskertasks und einem Raspberry Pi mit ebenfalls reichlich Scripten.
Nun hab ich das HC2 recht frisch und habe vor Tagen angefangen das ganze mit “Szenen” zu füttern.
Schnell stellte ich fest dass das alles nicht so läuft wie ich es vermutet habe.
LUA kenn ich nicht, jedoch ist es von der Syntax beim lesen solcher Scripte leicht zu verstehen.
Beim schreiben solcher tu ich mir eher noch schwer, also erst mal die wildesten Szenen “grafisch” gelöst.
Klappt auch solange man keine OR Abfragen einpackt, spätestens hier musste ich umschalten auf LUA und Klammern manuell setzen. Ob dahinter ein Denkfehler meinerseits oder nur die blöde “grafische Programmierung” steckt weis ich nicht, ist auch erst mal kein schlimmes Problem.
Anders ist es bei einer scheinbar einfachen (grafischen) Szene.
Ich habe zwei Roomba Saugroboter die ich als Virtuelle Devices (nochmal danke für die Vorlage auf Siio;)) eingebunden hab.
Diese starten, wann immer ich weg bin einmal am Tag bis spätestens 21 Uhr. Dies will ich mit einer “FreigabeVariable” lösen.
D.h. morgens setze ich mit einer ähnlichen Szene die Variable auf 1 Abends auf 0.
Mit dem grafischen Element einer Aktion zu einer bestimmten Zeit schien es einfach. Variable ändert sich aber nicht also in meinem Fall bleibt diese auf 1. Jemand eine Idee?
Im Anhang die außerordentlich komplexe Szene
Besten Dank für jede Unterstützung
warum machst du das über den Blog? Ich hab das auch mit roomba gemacht, frage da noch mehr werte ab. zuerst ob es tag ist also zwischen 8:00 uhr und 18:00 uhr. danach schonmal geputzt wurde (setzte Variable am Ende der Szene wenn Roomba losfährt auf 1)
Dann frage ich ob Roomba Akku >50% ist, wenn nicht prüfe ich in welchem Zustand der Roomba ist. Wenn er rum steht schick ich ihn zur Dock. Wenn er ein Ladefehler hat schick ich eine Pushnachricht. usw.
Funktioniert alles noch nicht so optimal und ist auch sehr hässlich geschrieben aber vielleicht kannst du dir Teile rausziehen.
Ach ja oben die grafische Szene ist korrekt. du musst Sie nur einmalig auf Start Klicken damit HC2 das “frisst”
--[[
%% properties
%% globals
cookie_Chris
cookie_Paula
VD_Roomba_Batt_Lev
Roomba_1_geputz
--]]
local startSource = fibaro:getSourceTrigger();
Chris = fibaro:getGlobal('cookie_Chris')
Paula = fibaro:getGlobal('cookie_Paula')
local tagstart = 0701 --07:00 = 0700
local tagende = 1700 -- 18:00 = 1800
print('Chris Anwesenheit: '..Chris)
print('Paula Anwesenheit: '..Paula)
print(os.date("%H%M"))
if
Chris == "0"
and
Paula == "0"
and
((tonumber(os.date("%H%M"))) >= tagstart and (tonumber(os.date("%H%M"))) <= tagende)
then
fibaro:debug('Niemand da und es ist Tag');
fibaro:debug('Roomba Status abfragen');
fibaro:call(310, "pressButton", "3"); -- Button Status
fibaro:sleep(2000); -- 2 sek Wartezeit
else
fibaro:debug('Jemand ist zuhause oder es ist Nacht, da wird nicht geputzt!');
fibaro:abort();
end
Batterie = fibaro:getGlobal('VD_Roomba_Batt_Lev')
sauber = fibaro:getGlobal('Roomba_1_geputz')
status = fibaro:getGlobal('VD_Roomba_State')
fibaro:debug('Wurde geputzt? '..sauber);
fibaro:debug('Akkuleistung= '..Batterie);
fibaro:debug('Ladestatus= '..status);
if Batterie > "50" and sauber == 'noch_nicht'
then
fibaro:debug('Akku voll, Schmutzig - los gehts! ');
fibaro:call(310, "pressButton", "19"); -- Button CLEAN
fibaro:debug('ich putze sir!');
fibaro:sleep(900000); -- 15 min Putzzeit
statusneu= fibaro:getGlobal('VD_Roomba_State')
Batterieneu = fibaro:getGlobal('VD_Roomba_Batt_Lev')
if Batterieneu < Batterie then
fibaro:debug('Variable wird auf geputzt gesetzt');
fibaro:setGlobal("Roomba_1_geputz", 'sauber');
else
fibaro:debug('keine Veränderung der Akkukapazität');
end
end
if sauber == 'sauber'
then fibaro:debug('heute wurde schon geputzt, Szene abgebrochen');
fibaro:abort();
elseif
Batterie < "50" and status == 'st_error'
then fibaro:debug('Akkuleistung gering - Ladefehler!');
fibaro:call(323, "sendPush", "Roomba Schlafzimmer kann nich putzen: Ladefehler!"); -- Push Handy
elseif
Batterie < "50" and status == 'st_base_wait'
then fibaro:debug('Akkuleistung - Roomba steht in der Welt rum - ab zur Dock');
fibaro:call(310, "pressButton", "10"); -- Button Dock
fibaro:call(323, "sendPush", "Roomba steht rum, fahr laden, Akku bei:" ..Batterie); -- Push Handy
--hier fibaro sleep und schleife um von vorn zu beginnen? danach bekommt er Status 2
elseif
Batterie < "50" and status == '2'
then
fibaro:debug('Akku wird gerade geladen');
-- Schleife? wenn er über 50% soll er lossaugen ?
else
fibaro:debug('etwas ist faul, lädt nicht richtig');
fibaro:call(323, "sendPush", "irgendwas ist faul mit Roomba (schwarz):" ..Batterie); -- Push Handy
fibaro:abort();
end
Hi, auf Start drücken damit die Szene funktioniert war jetzt wirklich zu einfach Danke.
Aus deinem Script werde ich mir auf jedenfall mal die nötigen Stellen ziehen.
Ich habe meine virtuellen Devices auf das nötigste gekürzt, also nutze nur die 3 Buttons die auch der Roomba selber hat zum starten und stoppen.
Weitere Daten sind zwar interessant aber für mich im Moment eher unnötig kompliziert und eher eine zusätzliche Fehlerquelle.
Vielleicht spiele ich damit mal rum wenn ich alles im Griff hab.
Hast du den eine Idee wie man eine eventuellen Fehler beim reinigen abfragen kann, also wenn der Roomba mal hängen bleibt zum Beispiel?
Kann mir nur vorstellen dies über die Akkuleistung und den Strom zu realisieren.
Ich hab immer noch starke Probleme mit Szenen die nicht richtig getriggert werden.
Szenen, die quasi genauso aufgebaut sind wie in meinem ersten Post funktionieren einfach nicht.
Wenn ich diese erstellt oder geändert habe drücke ich unten drunter immer auf “Sichern” und werde dann auf die Allgemeine Übersicht der Szene geleitet.
Dort drücke ich auf “Run” und die Szene wird ausgeführt.
Automatisch startet diese Szene dann jedoch immer noch nicht.