Timer mit Virtuellem Device

Hi,
Ich habe mit von hier ein Virtuelles Device runtergeladen und es angepasst um 4 unterschiedliche Zeiten zu timen.
Nun funktioniert mein Timer schon recht gut, aber ich bekomme folgendes (noch) nicht hin:

1.) Die Pushnachricht im Teil “TimerStart” wird nicht gesendet. Es werden aber auch keine Debug Medlungen ausgegeben, somit vermute ich dass der Teil garnicht angesprungen wird!?

2.) Wäre es perfekt, wenn nicht nur die Sekunden runtergezählt würden, sondern Minuten und Sekunden getrennt.

Habe das virtuelle Modil drangehängt (bitte Dateiendung von .txt auf .vfib ändern!)
Hat jemand einen Tipp für mich?

Hier mal der Code des Timers in dem VDevice:

local selfId = fibaro:getSelfId()

local timer = tonumber(fibaro:getValue(selfId, "ui.sTime.value"))
local runningTimer = tonumber(fibaro:getValue(selfId, "ui.rTime.value"))
fibaro:debug(timer)
fibaro:debug(runningTimer)

if runningTimer == 0 or runningTimer == nil then
 	fibaro:call(250, "turnOn")
  	while timer > 0 do
  		timer = timer - 1
  		fibaro:call(selfId, 'setProperty', 'ui.rTime.value', timer)
  		fibaro:debug(timer)	
    	fibaro:sleep(1000)
  		timer = tonumber(fibaro:getValue(selfId, "ui.rTime.value"))
    	fibaro:debug("Timer läuft", timer)
	end
  	fibaro:call(250, "turnOff")
  	fibaro:debug("Timer ausgeschaltet")
  	fibaro:setGlobal("PushOver","Silber Timer, Silber Produktion beendet",0,siren)
else
    fibaro:debug('anderer Timer läuft noch')
end

Das mit der Push Nachricht habe ich inzwischen hinbekommen.
Jetzt fehlt mir nur noch die Aufteilung der “Remaining Time” in Minuten und Sekunden.

Derzeit habe ich die Idee zwei getrennte Zähler laufen zu lassen. EINEN für die Anzeige und EINEN für die Anzeige.
Das geht aber sicher auch einfacher!?
Gibt es irgend ein Timer Skript wo ich mir das abschauen kann?

Hallo nochmal,
Ich möchte gerne meinen Timer etwas verändern um folgendes zu erreichen:

Habe einen Bewegungsmelder auf der Terasse, der in der Nacht 400W Halogenlicht aufdreht, wenn jemand die Terasse betritt.
Nun will ich mit einem VD diese Beleuchtung abschalten können, wenn ich draussen bei Kerzenlicht sitze.
Habe die Idee ein VD zu bauen, das Tasten für 1h, 3h, 6h besitzt, und das automatische Licht so lange deaktiviert!
Die Oberfläche habe ich schon fertig, nur die Zeitsteuerung klappt noch nicht.

Sorry beim vorigen Beitrag ist mir ein alter LUA Code reingerutscht!!
Bitte löschen!

Hi,

hast Du es mal mit einer globalen Var versucht?
Diese GV wird durch Deine Buttons gesetzt und mit sleep nach der Zeit des Buttons wieder zurückgesetzt.
SetTimeout geht wohl nicht im VD.

Die GV müsstest Du dann in Dein Licht-An-Script berücksichtigen.

VG Hoggle

Danke Hoggle für den Tipp, werd das mal ausprobieren…

Hab das jetzt mal ausprobiert, komme aber nicht weiter ;-(
Habe globale Variable “TerasseTimer” angelegt und versuche diese in den Speicher “sTime” des VD zu bekommen

Hier der Code eines Knopfes für 2 Minuten

local selfId = fibaro:getSelfId()
fibaro:setGlobal("TerasseTimer", 2)
fibaro:call(selfId, 'setProperty', 'ui.sTime.value', TerasseTimer)

WAS genau macht diese SelfID ?
Brauch ich das überhaupt noch?

SelfID holt sich die ID des VDs und setzt diese dann automatisch.
Also siehe Zeile 1 und dann Zeile 3.

Die drei Zeilen verstehe ich nicht.
Dort ist die Variable “TerasseTimer” nicht definiert…
Wozu musst Du „TerasseTimer“ in den Speicher „sTime“ des VD bekommen?

Der Plan ist folgender:
Ich habe 4 Tasten mit 15Min, 60Min, 180Min und 300Min.
Ich will beim Druck auf diese Tasten einen FibaroPlug für die angegebene Zeit ausschalten.
Danach soll er wieder aktiviert werden und eine PushNachricht soll verschickt werden!
Zusätzlich hab ich einen “stop” taste geplant, die den Timer vorzeitig stoppt und den Plug sofort wieder einschaltet.

Ziel:
Ich habe ein Bewegungslicht auf der Terasse das über einen Fibaro plug mit Strom versorgt wird.
den ich ab und zu für die oben genannte Zeit ausschalten möchte, wenn ich zum Beispiel bei Kerzenlicht draussen sitze und nicht will dass dauernd das Licht angeht…

Ich dachte ein Virtuelles Device ist dafür geeignet, vielleicht hab ich ja einen Denkfehler …

Nein, das passt wieder.
Dann so, wie ich oben geschrieben habe.
Deine vier Tasten haben das selbe Script, bloß ein unterschiedliches Sleep…

Ok, das mit den Variablen hab ich jetzt gecheckt!

local selfId = fibaro:getSelfId()
fibaro:setGlobal("TerasseTimer", 300)
local currentTime = fibaro:getGlobal("TerasseTimer")
fibaro:call(selfId, 'setProperty', 'ui.sTime.value', currentTime)

Klappt jetzt!

Nun bin ich am Hauptcode, der klappt auch schon ganz gut!

local selfId = fibaro:getSelfId()
local Plug = 85
local timer = tonumber(fibaro:getValue(selfId, "ui.sTime.value"))
local runningTimer = tonumber(fibaro:getValue(selfId, "ui.rTime.value"))
fibaro:debug(timer)
fibaro:debug(runningTimer)

if runningTimer == 0 or runningTimer == nil then
 	fibaro:call(Plug, "turnOff")
	fibaro:setGlobal('PushOver',"automatischr Beleuchtung Terasse,Automatik ist für "...timer.." Minuten deaktiviert,0,none")
  	while timer > 0 do
  		timer = timer - 1
  		fibaro:call(selfId, 'setProperty', 'ui.rTime.value', timer)
  		fibaro:debug(timer)	
    	fibaro:sleep(60000)
  		timer = tonumber(fibaro:getValue(selfId, "ui.rTime.value"))
    	fibaro:debug("Timer läuft", timer)
	end
  	fibaro:call(Plug, "turnOn")
  	fibaro:debug("Timer ausgeschaltet")
  	fibaro:setGlobal('PushOver',"automatischr Beleuchtung Terasse,Automatik ist wieder aktiviert,0,none")
	fibaro:sleep(8000)
else
    fibaro:debug('anderer Timer läuft noch')
end

Das einzige Problem hab ich noch mit der STOP Funktion!!
Wenn ich damit das VD stoppe, dann funktioniert das zwar, das Device läßt es sich danach aber nicht mehr bedienen!!
Hast du vielleicht einen Tipp??

fibaro:call(85, "turnOn")

local selfId = fibaro:getSelfId()
fibaro:setGlobal("TerasseTimer", 0)
timer = 0
fibaro:call(selfId, 'setProperty', 'ui.rTime.value', 0)
fibaro:call(selfId, 'setProperty', 'ui.sTime.value', 0)

Ist es eventuell so, dass Variablen der einzelnen Labels nicht übergreifend verwendet werden können?

Hi,

dazu müsste ich zu tief in Dein VD einsteigen.
Ich würde die Labelanzeige nicht als Variable bezeichnen.
Für mich sind das Anzeigen. Aber ihc bin kein Programmiere…
Die lassen sich schon übergreifend abfragen.

Ich würde die GV TerasseTimer einfach in dem Start-Button des eigentlichen VDs abfragen.
ggf im Stop-Button wieder auf 0 setzen.

Was ich meinte ist ein VD bzw. Buttons wie folgt (ob verschieden Zeiten oder ein Status ist ja egal):

und im Button:

--wenn GV auf "1", dann lässt das Script 
--die HUes im Flur EG blinken 

fibaro:setGlobal("Blinken_Flur", "1")

local selfId = fibaro:getSelfId()
fibaro:call(selfId, 'setProperty', 'ui.Label1.value', "Aktiviert")

Diese GV frage ich laufend im betreffendem Script (oder VD) ab (Bestandteil vom while bzw if)

Blinken-deaktivieren.png

Das bedeutet, wenn ich es richtig verstehe, dass die Labelanzeige ‘ui.Label1.value’ gar keine Variable ist!
In deinem Beispiel holst du dir also nur die Anzeige des Labels in eine Variable und dann kannst du es verändern.
Dadurch wird aber nur die Anzeige im Label, aber keine Variable verändert, soweit richtig ?

Wenn das so stimmt werde ich mal einen anderen Ansatz probieren:
Ich setze nur die globale Variable im VD und rufe von dort danach nur mehr eine LUA Skript auf welches gleich ALLES abdeckt!
Mal sehen ob das dann klappt…