Ankündigung

Einklappen
Keine Ankündigung bisher.

Stromzähler HM-ES-TX-WM Überlauf Gesamtproduktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Stromzähler HM-ES-TX-WM Überlauf Gesamtproduktion

    Hallo zusammen,

    ich habe ein Problem mit dem Homematic Stromzähler HM-ES-TX-WM welcher mit dem Ferraris-Lesekopf ausgerüstet ist.
    Er funktioniert recht genau, nur bei der Gesamtproduktion kommt es gelegentlich zu Problemen.

    Ich werte bei Openhab über eine Rule die Gesamtproduktion und die Tagesproduktion aus.
    Nun kommt es bei dem Zähler durch eine unglückliche Programmierung zum Überlauf des Gesamtzählers und die Gesamtproduktion ist falsch....
    Ich muss dann händisch eingreifen und die Gesamtproduktion mit 838000 addieren.

    Ich habe die rule mal aufgeschrieben.

    Nun kann man das irgendwie mit einer rule automatisieren?


    Rule zum Berichtigen des Wertes und Umrechnen

    Code:
    //Item CounterEnergy         -> Wert direkt vom Zähler
    //Item CounterEnergy1       -> Wert berichtigt 
    
    rule "Stromzaehler Einheiten"
    when
    Item CounterEnergy changed        //Wert vom Zähler
    
    then
    CounterEnergy1.postUpdate(CounterEnergy.state as DecimalType + 3352000)               //Überlauf zum 4. Mal kompensieren (+ 838000 *4)  
    Stromzaehler_kWh.postUpdate(CounterEnergy1.state as DecimalType / 1000)               //Umrechnen in kWh
    
    
    end

    Ausrechnen der Tagesproduktion:

    Code:
    rule "Stromzaehler Produktion Tag"
    
    when
    
    Item Stromzaehler_kWh received update
    
    then
    
    Stromzaehler_Produktion_Tag.postUpdate(Stromzaehler_kWh.deltaSince(now.withTimeAtStartOfDay))
    Strom_PV_Ertrag_Heute.postUpdate(Stromzaehler_Produktion_Tag.state as DecimalType)
    
    end

    Ich hatte mir das so gedacht:
    Ich brauche 2 rules:


    1. Täglich um Mitternacht die Werte sichern:

    Code:
    Wenn
             Mitternacht
    dann
             CounterEnergy_neu == CounterEnergy_alt
    2. Die tägliche Änderung auswerten (kann ja nur ansteigen :-))

    Code:
    Wenn
              Item CounterEnergy sich ändert,
    dann
             wenn
                     CounterEnergy_alt größer ist als CounterEnergy
             dann
                    CounterEnergy mit 838000 addieren
                    CounterEnergy == CounterEnergy_neu
    else
    CounterEnergy == CounterEnergy_neu
    Ist mein Ansatz richtig?
    Wie haben das andere User gelöst? Der Zähler ist ja bestimmt noch öfter im Einsatz :-)
    Und wie bekomme ich die Syntax vernünfitg hin?

    Kann mir da jemand einen Tip geben?


    Gruß
    Yankee

    #2
    Wenn ich das richtig verstehe, musst Du den Multiplikator bisher noch händisch anpassen?

    Wie wäre es damit:

    Code:
    rule "Überlaufkorrektur"
    when
        Item CounterEnergy changed
    then
        val Number nCounterEnergy = (CounterEnergy.state as Number).floatValue / 1000                    // Neuer Zählerstand in kWh, ohne Korrektur
        val Number nZaehler = (Stromzaehler_kWh.historicState(now.withTimeAtStartOfDay).state as Number) // Zählerstand um Mitternacht in kWh
        var Number nFaktor = (nZaehler / 838).intValue                                                   // Anzahl überläufe im Zählerstand
        if(nZaehler > nCounterEnergy + nFaktor * 838)                                                    // falls neuer Zählerstand mit altem Faktor zu niedrig
            nFaktor += 1                                                                                 // Faktor um eins erhöhen
        Stromzaehler_kWh.postUpdate(nCounterEnergy + nFaktor * 838)                                      // korrigierten Zählerststand speichern
    end
    .intValue sollte der ganzzahlige Anteil der Division sein.

    Kommentar

    Lädt...
    X