lastBreached

Guten Abend!!

Mit local Breached = (fibaro:getValue(tonumber(deviceID), “lastBreached”))
kann ich ja ermitteln wann ein Sensor das letzte mal ausgelöst hat. Als Ergebnis liefert er mir dann “1460140965” dieses Zeitformat.

Wie kann ich das in sek.,min, stunden, tagen umwandeln, damit ich es in einer Anzeige in meinem VD verwenden kann.

fibaro:call(thidID, "setProperty", "ui.LabelBreached.lastBreached", time)

Vielen Dank

Wolfgang

so, das habe ich schon herausbekommen:

time = os.time();

Uhrzeit = ((time - Breached)/60)
 
fibaro:call(thisId, "setProperty", "ui.LabelBreached.value", Uhrzeit.. " min");

da bekomme ich dann als Ergebnis z.B. 12,33333333 min.

Wie kann ich das auf voll sekunden beschränken und in tage, stunden, minuten und sekunden einteilen???

Hi,

du kannst folgende Funktion nutzen:

local time = os.date("*t", os.time()-Breached)

Damit wird eine Tabelle folgender Struktur erzeugt:

{year = 1998, month = 9, day = 16, yday = 259, wday = 4,
     hour = 23, min = 48, sec = 10, isdst = false}

Diese Tabelle kannst du dann wie folgt auslesen:

print(time.hour) – usw.

Viel Spass…

Gruß

Hi habe nochmal zur Uhrzeit eine Frage. Habe das jetzt so programmiert und es funktioniert auch grds…

Allerdings wird mir 1h zu viel angezeigt. Die aktuelle Uhrzeit ist richtig aber bei der Berechnung mit der o.g. Formel wird mir dann z.b. 1h 9m 4s angezeigt obwohl es nur 9m 4s sind. Kann das irgendwie mit der Sommerzeitumstellung zusammenhängen??? und kann man das in der Formel noch berücksichtigen indem man eine Stunde abzieht 3.600 sec. ??? Wo und wie muss ich das oben einbauen.

Danke

Wolfgang

Hi,

hast du unter Configuration, Location auch die richtige Zeitzone eingestellt? Die Zeit sollte dann normal laufen.

Gruß

@Daniel selbstverständlich!!?

Die akt. Uhrzeit stimmt ja auch. Aber das was bei lastBreached zurückgegeben wird ist ja die Unix Zeit seit 1970 und die kennt keine Sommerzeit. Der Wert der ausgegeben wird ist etwas wie 14546565!!!

Wolfgang

Hi,

stimmt. Ist immer eine Stunde gesetzt. Kannst aber einfach 3600 Sekunden abziehen. Funktioniert ohne Probleme:

local Breached = (fibaro:getValue(deviceID, "lastBreached"))
local time = os.date("*t", os.time()-Breached-3600)
print(time.hour)

Gruß

Hi Daniel,

so jetzt klappt es erst einmal grundsätzlich. Ich habe noch zwei kleine Probleme.

  1. hängt sich die Anzeige immer wieder auf und zählt nicht weiter obwohl ich das Programm im Mainloop habe!! Kann das an 4.081 liegen???
  2. wenn die Uhrzeit größer 24 h ist fängt sie wieder von vorne an der Tag ( day ) wird nicht angezeigt. m.E. kann ich aber auch nicht das Datum aus der Tabelle nehmen. Was muss ich für eine Zeile einfügen, dass auch die Tage angezeigt werden??

Danke

Wolfgang

Hi,

never put something important in the Main-Loop. Stürzt regelmäßig seit 3.x ab. Wenn kein fibaro:sleep drin ist nach 3 Stunden :wink: Der Bug ist seit bestimmt 1 1/2 Jahren nicht gefixt worden. Mach dir einen eigenen Button dafür und frag diesen in einer zeitgesteuerten Szene ab -> #läuft

In dem response steht auch der Tag:

print(time.day)

Gruß

o.k. gut zu wissen. Ja super hat mit time.day funktioniert. Ich dachte, das gibt das heutige Datum aus!!!