Denkfehler? Fibaro Variable zurücksetzen

Hallo zusammen,

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 :wink:
Besten Dank für jede Unterstützung

Unbenannt.jpg

Hi,

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

achso… DANKE! für das Lob :slight_smile:

Hi, auf Start drücken damit die Szene funktioniert war jetzt wirklich zu einfach :slight_smile: 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.

Danke & Gruß

Hallo, ich nochmal.

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.

Mache ich immer noch etwas falsch?

Herzlichen Dank für Ratschläge

Sorry für die Doppelposts, ich habs mit einer Funktion gelöst:
Link

Sehr eigenartig, dass man anscheint solche Umwege machen muss.
Danke & Gruß

Hallo Chris,

kurze Frage nach langer Zeit, die Variable “Roomba_1_geputz” setzt du dann außerhalb der Szene jeden Tag auf “nicht geputzt” oder übersehe ich was?

Danke