Hi Leute,
Ich versuche gerade ein Skript zu schreiben das folgendes macht:
Ist der Ventilator ausgeschaltet, dann schalte ihn ein und nach einer gewissen Zeit wieder aus (derzeit 10 Sek)
Ist er eingeschaltet, dann schalte ihn aus.
Leider macht mein Skript noch nicht das was es soll ;-(
Ausschalten klappt schon, aber beim Einschalten wird erst nach den 10 Sek eingeschaltet und dann nicht mehr aus.
Irgendwie steh ich auf der Leitung, kann mir jemand einen Tipp geben?
Hier mein Skript:
--[[
%% properties
%% events
%% globals
--]]
startSource = 215
local deviceValue1 = tonumber(fibaro:getValue(startSource, "value"))
if (deviceValue1 > 0) then
Debug("green",(os.date("%d.%B %Y um %X Uhr AUS")))
fibaro:call(215, "turnOff")
else
setTimeout(function()
fibaro:call(215, "turnOn")
Debug("green",(os.date("%d.%B %Y um %X Uhr EIN")))
end, 10000)
Debug("green",(os.date("%d.%B %Y um %X Uhr Zeit abgelaufen - ")))
end
Das ist leider nicht alles. Er zählt zuerst die Zeit runter udn dann schaltet er sich aus statt ein…
Ich dachte es wäre ein einfahcer Fehler.
Na ja, dann nmuss ich halt weiter experimentieren …
Hallo Hoggle,
Danke für die Codeschnipsel!
Wenn ich das richtig verstehe, dann läuft jeder Bereich setTimeout(function() so lange bis die Zahl bei End (inkl Multiplikator) vorbei ist, richtig?
Das bedeutet der erste läuft 2 x 1000 Millisekunden, der zweite 4 x 1000 MS u.s.w, richtig?
Hast du eine Idee wie ich es lösen kann, dass folgendes passiert:
1.) Szene wird aufgerufen und Ventilator läucht nicht -> Ventilator ein Timer auf Endzeit in 5 Minuten!
2.) Szene wir aufgerufen wenn Ventilator läuft -> Ventilator AUS, Timer gelöscht.
Wenn du zb. einen Switch nutzt kannst du abfragen wie viel Strom er gerade zieht. Also größer Null dann aus. Ansonsten an mit Sleeptime.
Kannst du auch mit einer Scene lösen.
Ja ich habe die beiden laufen gelassen und auch bemerkt, dass das 2.Skript zeitverzögert startet.
Habe das mit dem verzögert ausschalten auch damit schon gelöst, DANKE!!
startSource = 85
timeStop = 5000
local DeviceValue1 = tonumber(fibaro:getValue(startSource, "value"))
if (DeviceValue1 > 0) then
fibaro:call(startSource, "turnOff")
fibaro:debug("Beende die Szene?? - "..os.date("%d.%m.%Y", os.time()))
else
fibaro:debug("AN - "..os.date("%d.%m.%Y", os.time()))
fibaro:call(startSource, "turnOn")
setTimeout(function()
fibaro:call(startSource, "turnOff")
fibaro:debug("AUS - "..os.date("%d.%m.%Y", os.time()))
end, timeStop)
end
Bleibt nur nocht die Frage nach dem Exit
Ich würde gerne die Szene “sanft” beenden, da wo “Beende die Szene” steht, hast du einen Tipp?
Sorry für die Wortwahl, besser wäre “elegant”.
Ich meine alle laufenden Prozesse DIESES Skriptes zu beenden ohne andere Dinge die auf der HC2 sonst noch laufen zu beeinflussen … fibaro:abort() funktionierte im Test nicht, aber ich vermute da mangelt es an den nötigen Parametern
Ja Boomx das stimmt, aber in meinem Test war das immer erst nach dem Ablauf des Timers!
Da die echte Szene die ich vorhabe länger laufen soll (ca. 1-2 Stunden), will ich sie beenden, wenn sie noch aktiv ist!
In der Praxis geht es um einen Deckenventilator, denn ich nachts im Halbschlaf über eine Taste am NodOn aktiviere.
Er soll ca. 1 Stunde laufen udn sich dann abschalten. Zusätzlich soll er sich sofort abschalten, wenn ich die Taste erneut drücke während er läuft.
mit dem oben gezeigten Skript sollte das perfekt funktionieren, danke!!
Abschliessende Frage:
Gibt es einen Befehl mit dem ich die ID der Szene herausfinden kann, die gerade läuft?
Würde sie gerne nicht statisch eintragen wie hier fibaro:killScenes(203) sondern mittels Variable?
Hab leider bei meiner Suche im Forum dazu nichts gefunden was mir hilft.
Frage:
Kann ich die fibaro:killScenes(214) Funktion in der aktuellen Szene auch ohne Angabe der ID laufen lassen?
Habe Probiert stattdessen: fibaro:killScenes() zu verwenden, dann bekomme ich aber folgende Fehlermeldung:
[DEBUG] 13:34:18: line 212: attempt to concatenate local ‘sceneID’ (a nil value)
Zeile 212 gibt es in meinem Skript nich, hat nur 24 Zeilen!