Seite 1 von 3
Betriebsstundenzähler
Verfasst: 18. Jan 2016 14:22
von toto1975
Hallo in die Runde,
ich hoffe der Post ist hier richtig ansonsten bitte einfach verschieben
Ich möchte gerne einen Betriebsstundenzähler in OpenHAB integrieren. Mit meiner MySQL Persistence lasse ich mir z.B. die Schalter Ereignisse mit ON und OFF in die MySQL Datenbank eintragen. Diese Datensätze sind ebenfalls mit dem jeweiligen TimeStamp versehen.
Also:
2016-01-18 06:30 | OFF
2016-01-18 07:35 | ON
2016-01-18 07:45 | OFF
2016-01-18 07:50 | ON
2016-01-18 07:55 | OFF
Ist es möglich mir anzeigen zulassen wie lange der Schalter auf ON steht bzw. die Summe der Minuten die der Schalter auf ON insgesamt steht? Als Ergebnis wäre es schön wenn man die 15 Minuten an ein Item übergeben könnte.
Als Idee habe ich mir auch überlegt eine Rule zu erstellen die jede Sekunde(!!) durchgeführt wird wenn der Schalter auf ON steht. Der Wert der Variable wird nun um plus 1 erhöht. Habe hier allerdings bedenken um die Systemleistung und wie ich die Daten speichern kann dafür habe ich auch noch keine Idee.
Man könnte damit z.B. Anzeigen wie lange Energiespar-Lampen schon leben und welche Einsparung man damit erzielt hat. Wie lange die Kinder schon vorm Fernseher sitzen und so weiter.
Wie würdet ihr dies lösen bzw. habt ihr so etwas schon umgesetzt?
Viele Grüße
Torsten
Re: Betriebsstundenzähler
Verfasst: 19. Jan 2016 20:38
von seppy
Hi,
ich hab gesehen, Du hast Dich schon etwas länger damit beschäftigt. Spontan habe ich eine Idee, die ich aber erstmal testen will.
Ich melde mich dazu wieder.
Grüße,
Seppy
Re: Betriebsstundenzähler
Verfasst: 21. Jan 2016 18:17
von toto1975
Hallo Seppy,
ja das ist richtig... ich bin schon länger auf der Suche nach einer Lösung
Freut mich zu hören das du zumindest eine Idee hast
Viele Grüße
Torsten
Re: Betriebsstundenzähler
Verfasst: 22. Jan 2016 08:47
von seppy
Hallo Zusammen,
also so würde ich das versuchen. Teste doch mal ob das funktioniert.
Items:
Code: Alles auswählen
//Schalter für das Gerät dessen Betriebszeit gemessen werden soll
Switch DevSchalter
//Die Betriebsdauer (Wichtig: Dieses Item muss persistiert werden!!)
Number Betriebsdauer
Rule:
Code: Alles auswählen
rule "Betriebsdauerzähler"
when
Item DevSchalter changed
then
var int tmp = 0
var int tmp2 = 0
if (previousState == OFF){
logInfo("Homebox.DEV", "Schalter ON: " + DevSchalter.lastUpdate.time)
logInfo("Homebox.DEV", "Aktueller Zählerstand: " + Betriebsdauer.state)
} else if (previousState == ON) {
if (Betriebsdauer.state == Uninitialized){
logInfo("Homebox.DEV", "Betriebsdauer nicht initialisiert")
Betriebsdauer.postUpdate(0)
}
tmp = (Betriebsdauer.state as DecimalType).intValue
tmp2 = (now.millis - DevSchalter.lastUpdate.time).intValue
logInfo("Homebox.DEV", "Aktueller Zählerstand: " + tmp)
logInfo("Homebox.DEV", "Gerät angeschaltet: " + DevSchalter.lastUpdate.time)
logInfo("Homebox.DEV", "Gerät abgeschaltet: " + now.millis)
Betriebsdauer.postUpdate(tmp + tmp2/1000)
Betriebsdauer.persist
logInfo("Homebox.DEV", "Laufzeit Gerät Abschaltzeitpunkt in Millisekunden - Anschaltzeitpunkt in Sekunden = Laufzeit: " + (tmp2/1000) )
logInfo("Homebox.DEV", "Betriebszeit gesamt: " + Betriebsdauer.state)
}
end
Bin gespannt auf dein Feedback.
Grüße,
Seppy
Re: Betriebsstundenzähler
Verfasst: 23. Jan 2016 21:03
von toto1975
Hallo Seppy,
vielen Dank für Deine Idee, leider bekomme ich aber vier Fehlermeldungen:
Code: Alles auswählen
2016-01-23 20:37:02.142 [INFO ] [enhab.model.script.Homebox.DEV] - Betriebsdauer nicht initialisiert
2016-01-23 20:37:02.516 [WARN ] [.o.c.p.e.PersistenceExtensions] - There is no queryable persistence service registered with the name 'rrd4j'
2016-01-23 20:37:02.522 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Betriebsdauerzähler': cannot invoke method public long java.util.Date.getTime() on $
2016-01-23 20:37:02.852 [WARN ] [e.jetty.servlet.ServletHandler] - /openhab.app
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
meine Rule:
Code: Alles auswählen
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
rule "Betriebsdauerzähler"
when
Item Licht_Flur_unten changed
then
var int tmp = 0
var int tmp2 = 0
if (previousState == OFF){
logInfo("Homebox.DEV", "Schalter ON: " + Licht_Flur_unten.lastUpdate.time)
logInfo("Homebox.DEV", "Aktueller Zählerstand: " + Betriebsdauer.state)
} else if (previousState == ON) {
if (Betriebsdauer.state == Uninitialized){
logInfo("Homebox.DEV", "Betriebsdauer nicht initialisiert")
Betriebsdauer.postUpdate(0)
}
tmp = (Betriebsdauer.state as DecimalType).intValue
tmp2 = (now.millis - Licht_Flur_unten.lastUpdate.time).intValue
logInfo("Homebox.DEV", "Aktueller Zählerstand: " + tmp)
logInfo("Homebox.DEV", "Gerät angeschaltet: " + Licht_Flur_unten.lastUpdate.time)
logInfo("Homebox.DEV", "Gerät abgeschaltet: " + now.millis)
Betriebsdauer.postUpdate(tmp + tmp2/1000)
Betriebsdauer.persist
logInfo("Homebox.DEV", "Laufzeit Gerät Abschaltzeitpunkt in Millisekunden - Anschaltzeitpunkt in Sekunden = Laufzeit: " + (tmp2/1000) )
logInfo("Homebox.DEV", "Betriebszeit gesamt: " + Betriebsdauer.state)
}
end
Hier habe ich wohl noch einen Import nicht vorgenommen aber welcher? Im Designer bekomme ich jedoch keine Fehler angezeigt.
Betriebsdauer habe ich in meiner mysql.persist so hinterlegt
Warum sucht er Daten in 'rrd4j'? Ich habe doch nur eine mysql.persist
In meiner mysql Datenbank habe ich folgende Einträge
Time Value
2016-01-23 20:30:38 0
2016-01-23 20:33:48 0
usw.
Ich glaube ich habe da etwas grundlegendes falsch gemacht
Kannst du mir da noch weiterhelfen?
Gruß
Torsten
Re: Betriebsstundenzähler
Verfasst: 24. Jan 2016 09:27
von seppy
Hi Toto1975,
ich bin mir nicht sicher, versuch mal
zu enfernen, evtl. funktioniert das nur mit rrd4j als Persistence Service.
Die erste Meldung ist kein Fehler, sondern nur die korrekte Info, dass das Item Betriebsdauer noch nie initialisiert wurde.
Grüße,
Seppy
Re: Betriebsstundenzähler
Verfasst: 24. Jan 2016 12:36
von toto1975
Hallo Seppy,
ich glaube der Fehler liegt darin das ich
nirgends stehen habe sondern nur
in meiner mysql.persist
Sorry ich bin noch totaler Anfänger aber wo sollte der Eintrag Betriebsdauer.persist hin?
Gruß
Torsten
Re: Betriebsstundenzähler
Verfasst: 24. Jan 2016 18:08
von seppy
Ne in der Regel die ich gepostet habe, steht das "Betriebsdauer.persist" drin. Nimm das dort mal raus!
Re: Betriebsstundenzähler
Verfasst: 24. Jan 2016 22:03
von toto1975
Okay das habe ich raus genommen.... jetzt habe ich nur noch einen Fehler
Code: Alles auswählen
2016-01-24 21:57:56.502 [WARN ] [e.jetty.servlet.ServletHandler] - /openhab.app
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
at java.lang.String.substring(Unknown Source) ~[na:1.7.0_79]
Leider habe ich bei Google nichts passendes gefunden
Re: Betriebsstundenzähler
Verfasst: 25. Jan 2016 10:55
von seppy
Ich bin mir nicht sicher, ob die Meldung überhaupt etwas mit der Regel zu tun hat, da wir die Methode "substring" nicht nutzen.
Werden denn Werte in die Datenbank geschrieben?
Grüße,
Seppy