Rollladen vs Licht vs Tageszeit - Frage zum Script

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

Hi,

das Skript startet nicht, da der Trigger nicht korrekt gesetzt wurde.

https://www.siio.de/fibaro-homecenter-guide-teil-3-trigger-auswerten/

Gruß

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.

Hallo Ihr Zwei,
Danke für das Feedback.

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…

Das verstehe ich nicht…

Gruß

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).

Viele Grüße
Schnuckman

Versuch macht kluch… :slight_smile:

Ich habe den Header jetzt komplett drin. Warten wir mal ab…


--[[
%% properties
77 value
%% weather
%% events
%% globals
--]]

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…

Wie du schon sagst, wird es hier eine Szene geben, welche die Rollläden steuert. Schau am Besten mal in den versteckten Szenen.

Gruß

Nutzt Du für das "rein durch umsetzen der Variable von Night auf Morning " das Speichern im Var-Panel oder machst Du es per VD/Code?

Ich setze die globalvar per Szene von Night auf Morning.

Meine obige Rollladenszene soll vom Schalter getriggert werden und die den Wert der globalvar berücksichtigen.

Hallo zusammen,
ich habe grade etwas getestet:

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

Grüße
Torsten

Hi,

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.

Grüße
Torsten

ja, die Bedingung nutze ich auch nicht.