Betriebsstunden erfassen
Verfasst: 17. Dez 2019 17:41
So jetzt habe ich ein Problem bei dem ich nicht weiterkomme, aufgrund meiner noch mangelnder Erfahrung mit dem Errechnen diverser Werte.
Meine Items:
Mit dieser Regel erfasse ich als Counter die "Betriebszeit" meines Yamaha Receivers:
Jede Sekunde wird der Counter für die Betriebszeit um eins erhöht. Das funktioniert auch. Mittels folgender Regel, errechne ich mir die Sekunden in Stunden, Minuten und Sekunden um:
Jetzt bekomm ich aber mittlerweile eine Stundenanzeige >16000 und das finde ich optisch nicht ansprechend, daher würde ich gern die Stunden auf 24h Anzeige Umbauen und als Zusatzinformation Tage anzeigen. Quasi: 66 Tage 5:25:39 Stunden, als Beispiel.
Könnt ihr mir dabei helfen? Die Umrechnung auf Tage ist ja kein Problem.
Mit diesen Zeilen würde ich den Code ergänzen, die Tage werden auch angezeigt, nur wie bekomme ich die Stundenanzeige umgebaut, das max. 23 Stunden angezeigt werden und bei >=23 Stunden die Stundenanzeige wieder auf 0 springt?
Eventuell kennt ihr auch einen einfacheren Code und ich mach es nur unnötig kompliziert.
Meine Items:
Code: Alles auswählen
//RX-A2050
Number Yamaha_RXA2050_BetriebsstundenZaehler "Betriebsstunden [%d]" <receiver>
String Yamaha_RXA2050_Betriebsstunden "Betriebsstunden RX-A2050 [%s Stunden]" <receiver>
Code: Alles auswählen
rule "RX-A2050 Bertriebsstunden"
when
Time cron "0/1 * * * * ?"
then
if(Yamaha_RXA2050_Power.state == ON){
var Number Zaehler_RX_A2050 = Yamaha_RXA2050_BetriebsstundenZaehler.state as DecimalType
Zaehler_RX_A2050=Zaehler_RX_A2050+1
Yamaha_RXA2050_BetriebsstundenZaehler.postUpdate(Zaehler_RX_A2050)
}
end
Code: Alles auswählen
rule "Aktualisiere_Betriebsstunden_Anzeige"
when
Item Yamaha_RXA2050_BetriebsstundenZaehler changed
then
var String h
var Number H
var String m
var Number M
var String s
var Number S
/*berechne Stunden */
S = Yamaha_RXA2050_BetriebsstundenZaehler.state as Number //Erfassen der gezählten Ticks als Nummer
H = (S/3600).intValue //Errechnen der Gesamtstunden
h = H.toString
S = S-H*3600 //Errechne die Sekunden
/* berechne Minuten */
M = (S/60).intValue //Errechne die Minuten
if (M <=9) m = "0" + M.toString //Wenn Minuten <=9, dann füge "0" zum String hinzu
else m = M.toString //Direkte Ausgabe zum String für Minuten
/* berechne sekunden */
S = S-M*60 //Errechne Sekunden
if (S <=9) s = "0" + S.toString //Wenn Sekunden <=9, dann füger "0" zum String hinzu
else s = S.toString //Direkte Ausgabe zum String für Sekunden
Yamaha_RXA2050_Betriebsstunden.postUpdate(h+":"+m+":"+s)
end
Könnt ihr mir dabei helfen? Die Umrechnung auf Tage ist ja kein Problem.
Code: Alles auswählen
...
var String d
var Number D
D = ((Yamaha_RXA2050_BetriebsstundenZaehler.state as Number)/86400).intValue //Errechnen der Ticks(Sekunden) in Tage
d = D.toString //Direkte Ausgabe zum String für Tage
...
Yamaha_RXA2050_Betriebsstunden.postUpdate(d+" Tage "+h+":"+m+":"+s)
Eventuell kennt ihr auch einen einfacheren Code und ich mach es nur unnötig kompliziert.