Moin zusammen,
ich verstehe etwas nicht und benötige bitte mal Eure Hilfe:
Ich möchte folgendes Szenario abbilden:
ich komme Abends ins Badezimmer - mache Licht an und die Rollladen fahren runter
ich komme Morgens ins Badezimmer - mache Licht an später wieder aus und die Rollladen fahren hoch
Warum startet das Script beim Wechsel der Tageszeit
--[[
%% properties
77 value
--]]
-- Abends - Rollladen runter wenn Licht an
if (tonumber(fibaro:getValue(77, "value")) > 0
and fibaro:getGlobalValue("TimeOfDay") == "Evening" )
then
fibaro:call(165, "close");
end
-- Morgens - Rollladen hoch wenn Licht aus
if (tonumber(fibaro:getValue(77, "value")) == 0
and fibaro:getGlobalValue("TimeOfDay") == "Morning" )
then
fibaro:call(165, "open");
end
Sicher das 77 der Schalter ist? (sollte Value nur bei ein oder aus ändern)
Sensoren übertragen sehr häufig z.B. Temperatur usw. und würden Zeitnah zu ToD triggern.
Hast Du einen 230V oder Batterie betriebenen Schalter?
Bei Batterie kann sein dass er falsch konfiguriert ist und regelmäßig updates an die Zentrale sendet.
Nur eine Frage zur Verständnis:
Warum öffnest Du die Rollos erst wenn das Licht im Bad ausgeschalten werden?
Du kannst relativ leicht bei ein oder aus am Morgen öffnen wenn Du nur auf ToD prüfst.
In der Regel werden sie beim Einschalten geöffnet und nur wenn Du Nachts einschaltest und Morgens ausschaltest gehen sie beim ausschalten runter.
Abends könntest Du auch so abdecken dann würden sie auch beim Ausschalten reagieren fall davor eingeschalten.
Also - die 77 ist der Schalter - sprich ein Fibaro Unterputzrelais.
Die Idee dahinter - ich geh morgens ins Bad mache Licht an und die Rollladen bleiben unten.
Nachdem ich geduscht habe und fertig bin verlasse ich das Bad, schalte das Licht aus und die Rollladen fahren hoch…
Abends genau umgekehrt - ich gehe ins Bad und die Rollladenfahren als Sichtschutz runter.
Nach meinem Verständnis sollte das Script doch durch den Schalter 77 angetriggert werden.
--[[
%% properties
77 value
--]]
In Abhängigkeit der Tageszeit entscheide ich dann ob hoch oder runter.
Problem ist nur, dass das Script auch läuft wenn der Schalter 77 nicht betätigt wird - alleine dadurch,
dass “TimeOfDay” von Night auf Morning springt fahren um 6:30 die Rollladen hoch…
hast du mal versucht, den Header vollständig reinzuschreiben (also nicht nur “%%properties” zu initialisieren)? Kannst einfach aus einer umgewandelten Blockszene rauskopieren (dabei als einzigen Trigger natürlich die “77 value” wieder reinbasteln, den Rest aber nicht löschen). Keine Ahnung, obs klappt, aber Sparsamkeit bei Initialisierungen ist in der IT immer schlecht (gelernt vor 20 Jahren im Informatik-Unterricht, bisschen was ist hängengeblieben).
Heute morgen sind um zwanzig nach sechs die Rollladen wieder hoch.
Obwohl den Schalter 77 keiner gedrückt hat…
Hat einer ne Idee?
Ich habe mir alle Scripte angeschaut - es läuft auch kein Script ab mit dem ich das Licht im Schlafzimmer steuere…
das komische ist - ich kann das verhalten rein durch umsetzen der Variable von Night auf Morning nicht reproduzieren.
Ich habe jetzt mal ein Debug zwischen gehanten um festzustellen, wodurch die Szene ausgelöst wurde.
Löschen mal die Szene und lege eine neue mit dem gleichen Code an.
Baue auch eine Debugzeile mit Uhrzeit ein.
Dann siehst wann die Szene getriggert wurde, vlt kommst du so dem Problem auf die Schliche.
@mdietinger
jepp, ich muss micht jetzt da ran tasten…
Das mit dem Debug habe ich grade gemacht - doof nur, dass ich das Verhalten manuell nicht reproduzieren kann.
Auf dem ersten Blick würde ich sagen, es existiert eine Szene, die bei Sonnenaufgang alle Lichter ausschaltet und dadurch meine Rollladenszene triggert.
Ist aber ausgeschlossen…
Habe die Variable manuell auf “Night” gesetzt.
Habe mein Rollladenscript um ein paar Zeilen zum Debug ergänzt:
local trigger = fibaro:getSourceTrigger()
if (trigger['type'] == 'property') then
fibaro:debug('Szene wurde durch Modul getriggert')
elseif (trigger['type'] == 'global') then
fibaro:debug('Szene wurde durch Variable getriggert')
elseif (trigger['type'] == 'other') then
fibaro:debug('Anderer Trigger')
end
Durch das TimeOfDay Script habe ich die Variable auf Morning gesetzt.
Der Debug gibt “Szene wurde durch Variable getriggert” aus und die Rollladen fahren hoch.
Aber under Global ist nichts - ich gehe nur auf die Module…
Ich verstehe es nicht - Baue jetzt einen Workaround drum, indem ich die Rollladen nur hochfahre, wenn
die Scene durch “property” getriggert wurde.
Ist doch aber normal nicht nötig, oder??
Ich habe alles anderen Szenen durchgeschaut - dort läuft definitiv nichts anderes
Durch das TimeOfDay Script habe ich die Variable auf Morning gesetzt.
Der Debug gibt „Szene wurde durch Variable getriggert“ aus und die Rollladen fahren hoch.
Aber under Global ist nichts – ich gehe nur auf die Module…
die ersten zwei Zeilen passen doch. Bei Änderung von ToD wird die Szene getriggert. Das passt auch mit dem Debug.
Alles gut.
Was soll den „unter Global“ sein? Der Bereich im Header? Wenn Du Dein gesamtes Script postest, kann man es einfacher nachvollziehen
Hallo zusammen,
so habe ich es jetzt laufen.
Es macht jetzt genau was es soll - die Rollladen sind heute morgen mit Sonnenaufgang nicht hochgefahren.
--[[
%% properties
77 value
%% weather
%% events
%% globals
--]]
local trigger = fibaro:getSourceTrigger()
if (trigger['type'] == 'property') then
-- Abends - Rollladen runter wenn Licht an
if (tonumber(fibaro:getValue(77, "value")) > 0
and fibaro:getGlobalValue("TimeOfDay") == "Evening" )
then
fibaro:call(165, "close");
end
-- Morgens - Rollladen hoch wenn Licht aus
if tonumber(fibaro:getValue(77, "value")) == 0
and
((fibaro:getGlobalValue("TimeOfDay") == "Morning"
and (fibaro:getGlobalValue("DayArt") == "Werktag" or fibaro:getGlobalValue("DayArt") == "Samstag")
or
(fibaro:getGlobalValue("TimeOfDay") == "Morning"
and (fibaro:getGlobalValue("DayArt") == "Feiertag" or fibaro:getGlobalValue("DayArt") == "Sonntag")
and tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "09", "00"))
)))
then
fibaro:call(165, "open");
end
end
Wobei ich der Meinung bin, dass die Bedingung
local trigger = fibaro:getSourceTrigger()
if (trigger['type'] == 'property') then
end
aussen rum doch überflüssig sein sollte, oder nicht. Es wird ja nichts in Abhängigkeit von Variablen gestartet.
Ich konnte aber feststellen, dass dieses Script trotzdem mit änderung der “TimeOfDay” auf Morning anläuft.