Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei der Rechnung mit Strom-Zählerständen

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

    [Codebeispiel] Problem bei der Rechnung mit Strom-Zählerständen

    Hallo zusammen,

    ich bin gerade dabei mich in die Welt von OpenHAB einzuarbeiten. Ich habe allerdings ein Problem bei der Rechnung mit historischen Stromwerten (Zählerständen), scheinbar passt da irgendetwas mit den Einheiten nicht, so dass die Berechnung in die Hose geht?!?

    Ich möchte über den mit einer InfluxDB aufgezeichneten Zählerstand verschiedene historische Werte berechnen, z. B. Stromverbrauch gestern, aktueller Stromverbrauch heute.

    Nachfolgend die Regel zur Berechnung des gestrigen Verbrauchs:

    Code:
    rule "Stromverbrauch gestern"
    when
    //Time cron "0 59 23 * * ?"
    Time cron "* * * * * ?"
    then
    var Number aktuellerStand = (iSmartmeterHS_Zaehlerstand.state as Number)
    var Number historischerStand = (iSmartmeterHS_Zaehlerstand.historicState(now.with TimeAtStartOfDay).state as Number)
    var Number tagesverbrauch = aktuellerStand - historischerStand
    
    logInfo("Smartmeter", "Zaehlerstand aktuell=" + aktuellerStand)
    logInfo("Smartmeter", "Zaehlerstand historisch=" + historischerStand)
    logInfo("Smartmeter", "Tagesverbrauch=" + tagesverbrauch)
    
    end
    Log OpenHAB:

    Code:
    2020-01-31 10:51:50.067 [INFO ] [se.smarthome.model.script.Smartmeter] - Zaehlerstand aktuell=21705.250400000002 kWh
    2020-01-31 10:51:50.078 [INFO ] [se.smarthome.model.script.Smartmeter] - Zaehlerstand histori=21693.2408
    2020-01-31 10:51:50.087 [INFO ] [se.smarthome.model.script.Smartmeter] - Tagesverbrauch=78138879746.759207200000
    Beim aktuellen Zählerstand ist die Einheit kWh hinterlegt, siehe Log. Beim aus der InfluxDB geholten historischen Wert scheinbar noch keine?!? Muss hier die Einheit separat zugewiesen werden?

    Meine Items:

    Code:
    Number:Energy iSmartmeterHS_Zaehlerstand "Tariff [%.2f kWh]" { channel="smartmeter:meter:SmartmeterHS:1-0_1-8-0" }
    Number:Power iSmartmeterHS_Wirkleistung "Current usage [%.2f W]" { channel="smartmeter:meter:SmartmeterHS:1-0_16-7-0" }
    Danke und VG
    Tino

    #2
    Ergänzung:

    Die Kalkulation scheint nicht zu funktionieren... selbst

    var Number tagesverbrauch = aktuellerStand - 1 zeigt nicht den korrekten Wert... keine Ahnung woher das astronomisch hohe Ergebnis kommt :/

    Kommentar


      #3
      Das Problem heißt UoM, Units of Measurement. Deine Items sind als Number:Energy und Number:Power definiert. Die Persistence liefert aber leider nur dimensionslose Werte zurück, openHAB weiß nicht, wie es die beiden Werte verrechnen muss. (Zur Erklärung: Man könnte zum Beispiel von 30kW 12 PS abziehen, openHAB rechnet dann automatisch um, aber man muss schon eine Dimension angeben.)
      Das Einfachste ist, die Einheiten vor der Berechnung los zu werden:
      Code:
      rule "Stromverbrauch gestern"
      when
        //Time cron "0 59 23 * * ?"
          Time cron "0/10 * * * * ?" // alle 10 Sekunden sollte für Testzwecke reichen
      then
          var Number aktuellerStand = (iSmartmeterHS_Zaehlerstand.state as Number).floatValue
          var Number historischerStand = (iSmartmeterHS_Zaehlerstand.historicState(now.with TimeAtStartOfDay).state as Number).floatValue
          var Number tagesverbrauch = aktuellerStand - historischerStand
      
          logInfo("Smartmeter", "Zaehlerstand aktuell= {} kWh", aktuellerStand)
          logInfo("Smartmeter", "Zaehlerstand historisch= {} kWh", historischerStand)
          logInfo("Smartmeter", "Tagesverbrauch= {} kWh", tagesverbrauch)
      end
      Beachte bitte auch die veränderten logInfo() Texte. Entweder die Variable direkt übergeben (mittels geschweifter Klammern) oder als String.

      Kommentar

      Lädt...
      X