Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbrauch je Minute / Stunde / Tag

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

    Verbrauch je Minute / Stunde / Tag

    Hallo Zusammen,

    ich versuche aus meinen Zählerdaten den Verbrauch in kWh je Zeitraum zu berechnen. Ich habe im Forum gesucht und auch Beispiele gefunden, doch irgendwie klappt es nicht so richtig.

    So sieht meine Itemskonfig aus:
    Code:
    [zaehler]
                    [[ehz]]
                            name = Stromzäer
                            [[[zaehler]]]
                                    easymeter_code = 1-0:1.8.0*255
                                    device = /dev/ttyEHZ
                                    type = num
                                    sqlite = yes
                            [[[vb_1m]]]
                                    type = num
                                    sqlite = yes
                                    cache = on
                                    crontab = * * * * = 1
                                    eval = sh.zaehler.ehz.zaehler() - sh.zaehler.ehz.zaehler.db('min', '1i')
    In dem zaehler.ehz.zaehler wird von meinem Easymeter der Zählerstand in kWh ausgelesen. mit dem Item zaehler.ehz.vb_1m möchte ich zum Beispiel den Verbrauch der letzten Minute darstellen. Dazu ziehe ich von dem aktuellen Zählerstand den minimalen Zählerstand der letzten Minute ab. Mittels Crontab mache ich dies jede Minute.

    Code:
    > ls zaehler
    Items:
    ======
    zaehler
    zaehler.ehz
    zaehler.ehz.zaehler = 10288.8519066
    zaehler.ehz.vb_1m = 10288.849601
    In dem Item wird aber einfach nur jede Minute der Zählerstand übernommen. Was mache ich falsch?

    Gruß Felix

    #2
    Hat keiner einen Tip für mich? Die Beispiele, die ich gefunden habe, gehen irgendwie immer von Impulsen aus. Ich hab ja absolute Werte. Eigentlich sollte das doch ganz einfach sein.
    Gruß Felix

    Kommentar


      #3
      Hallo Felix,
      so gehts bei mir. Aus dem Forum abgekupfert

      Code:
      [iskra]
          [[stand_bezug]]
              iskra_code = 1-0:1.8.0*255
              device = /dev/ttyS0
              type = num
              cache = on
              sqlite = yes
          [[stand_einspeisung]]
              iskra_code = 1-0:2.8.0*255
              device = /dev/ttyS0
              type = num
              cache = on
              sqlite = yes
          [[leistung_lu]]
              iskra_code = 1-0:36.7.0*255
              device = /dev/ttyS0
              type = num
              cache = on
              sqlite = yes
          [[leistung_lv]]
              iskra_code = 1-0:56.7.0*255
              device = /dev/ttyS0
              type = num
              sqlite = yes
              cache = on
          [[leistung_lw]]
              iskra_code = 1-0:76.7.0*255
              device = /dev/ttyS0
              type = num
              sqlite = yes
              cache = on
          [[leistung_summe]]
              iskra_code = 1-0:16.7.0*255
              device = /dev/ttyS0
              type = num
              cache = on
              sqlite = yes
      
      [ehz]
          [[haus]]
              eval = round(sh.iskra.stand_bezug())
              eval_trigger = iskra.stand_bezug
              enforce_updates = yes
              type = num
              cache = on
              sqlite = yes
               [[[leistung_aktuell]]]
                   eval = ((sh.iskra.leistung_summe())/1000)
                   eval_trigger = iskra.leistung_summe
                   type = num
                   sqlite = yes
                   cache = on
                    [[[[max]]]]
                        type = num
                        eval = "sh.ehz.haus.leistung_aktuell.db('max', '24h')"  # Maximum über die letzten 24h berechnen
                        eval_trigger = ehz.haus.leistung_aktuell   # Änderungen der Leistung triggern die Neuberechnung
                    [[[[min]]]]
                       type = num
                       eval = "sh.ehz.haus.leistung_aktuell.db('min', '24h')"  # Minimum über die letzten 24h berechnen
                       eval_trigger = ehz.haus.leistung_aktuell   # Änderungen der Leistung triggern die Neuberechnung
               [[[verbrauch]]]
                  [[[[aktuell]]]]
                      type = num
                      sqlite = yes
                      cache = on
                      eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.minute.since.midnight.dbstr())
                      eval_trigger = ehz.haus
                  [[[[gestern]]]]
                      type = num
                      cache = on
                      sqlite = yes
                      crontab = 0 0 * * = 1
                      eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1d', '1d')
                      [[[[[weekly_avg]]]]]
                          type = num
                          cache = on
                          sqlite = yes
                          eval = round(sh.ehz.haus.verbrauch.gestern.db('avg', '1w'), 2)
                          eval_trigger = ehz.haus.verbrauch.gestern
                  [[[[stuendlich]]]]
                      type = num
                      cache = on
                      sqlite = yes
                      crontab = 0 * * * = 1
                      eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1h','1h')
                  [[[[monat]]]]
                      type = num
                      cache = on
                      sqlite = yes
                      crontab = 0 0 1 * = 1
                      eval = sh.ehz.haus() - sh.ehz.haus.db('max', '1m', '1m')
      Ausgabe

      Code:
      >ls iskra
      Items:
      ======
      iskra
      iskra.stand_bezug = 7510.642
      iskra.stand_einspeisung = 3653.028
      iskra.leistung_lu = 584
      iskra.leistung_lv = 158
      iskra.leistung_lw = 248
      iskra.leistung_summe = 991
      
      > ls ehz  
      Items:
      ======
      ehz
      ehz.haus = 7510
      ehz.haus.leistung_aktuell = 1.942
      ehz.haus.leistung_aktuell.max = 5.601
      ehz.haus.leistung_aktuell.min = -1.703
      ehz.haus.verbrauch
      ehz.haus.verbrauch.aktuell = 9.0
      ehz.haus.verbrauch.gestern = 10.0
      ehz.haus.verbrauch.gestern.weekly_avg = 13.13
      ehz.haus.verbrauch.stuendlich = 1.0
      ehz.haus.verbrauch.monat = 321.0
      Gruß
      Zuletzt geändert von klab; 18.10.2016, 19:15.

      Kommentar


        #4
        Hallo,
        Ich habe mich vor ein paar Monaten für meinen Regenmesser mit nem ähnlichen Problem rumgeschlagen.
        Wie oft ändert sich denn der Zählerwert und wird in die Datenbank geschrieben? Vermutlich nicht so oft sodas
        du mit min über eine Minute nichts sinnvolles heraus bekommst.
        Starte sh mal interaktiv und ruf die Werte von der Kommandozeile ab. Dann siehst du wo die stehen.
        Du kannst auch mal in die db reinschauen mit sqlite. Was das sqlite pluigin da so treibt ist schwer zu durchschauen.
        Viel Glück.

        Michael

        Kommentar


          #5
          Hallo Leute,

          ich hatte leider keine Benachrichtigung zu der Antwort erhalten, habe ich nun angepasst. Danke für die Hilfe.

          Ich habe das vorhin mal so eingebaut. Aktuell funktioniert es noch nicht mit den folgenden Meldungen:
          Code:
          2016-10-21 08:10:57 WARNING  item         ehz.haus.verbrauch.aktuell Item ehz.haus.verbrauch.aktuell: problem evaluating sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.minute.since.midnight.dbstr()): unsupported operand type(s) for -: 'int' and 'NoneType' -- item.py:__run_eval:342
          Ich habe mit dem Interaktiven Modus noch etwas Analyse betrieben, ich vermute, dass Problem liegt daran, dass ich die Items neu angelegt habe und noch keine historischen Daten verfügbar sind. Bei der DB Abfrage kommt vermutlich ein "NoneType" wenn der Startzeitpunk in der DB noch nicht existiert.
          Ich werde einfach mal eine Stunde mich gedulden und schauen, ob dann für den stündlichen Verbrauch ein Wert berechnet wurde. Ich werde hier berichten.

          Gruß Felix

          Kommentar


            #6
            Hallo Felix,
            zur Berechnung musst Du noch folgendes

            https://knx-user-forum.de/forum/supportforen/smarthome-py/40661-zeitdifferenzen-und-abfrageobjekte-für-sqlite

            einfügen

            Gruß
            klab

            Kommentar


              #7
              Hallo Zusammen,

              danke für eure Hilfe. Es funktioniert nun alles wie gewünscht. Die Zeit-Items hatte ich schon angelegt. Das Problem war tatsächlich, dass in der Datenbank noch keine historischen Daten verfügbar waren und die Differenz daher nicht berechnet werden konnte.

              Gruß Felix

              Kommentar


                #8
                Ich habe ebenfalls Probleme mit einer Abfrage aus der sql db.


                Mit folgendem Items:
                Code:
                [WS]
                    [[Temperatur]]
                        type = num
                        knx_dpt = 9
                        knx_cache = 3/0/40
                        visu_acl = rw
                        sqlite = yes
                        [[[MIN]]]
                            type = num
                            knx_dpt = 9
                            eval = sh.WS.Temperatur.db('min', '12h')
                            crontab = init | 0,10,20,30,40,50 * * * = 1
                            visu_acl = rw
                            sqlite = yes
                            enforce_updates = true
                        [[[MAX]]]
                            type = num
                            knx_dpt = 9
                            eval = sh.WS.Temperatur.db('max', '12h')
                            crontab = init | 0,10,20,30,40,50 * * * = 1
                            visu_acl = rw
                            sqlite = yes
                            enforce_updates = true
                bekomme ich folgenden Eintrag im Log

                Code:
                [LIST=1][*]2016-11-04 00:30:02 INFO WS.Temperatur.MIN-eval Item WS.Temperatur.MIN: evaluating sh.WS.Temperatur.db('min', '12h') returns None[*]2016-11-04 00:30:02 INFO WS.Temperatur.MAX-eval Item WS.Temperatur.MAX: evaluating sh.WS.Temperatur.db('max', '12h') returns None[/LIST]
                Ist zwar nur ein INFO Eintrag aber warum?

                Kommentar


                  #9
                  Hi fuxl66,

                  hast du das Problem immernoch? Ich vermute, dass einfach noch keine Daten in der DB waren und er deswegen nichts zurückgeben kann.

                  Gruß Felix

                  Kommentar


                    #10
                    das oben genannte Problem hab ich nicht mehr, aber mit einem anderen Item.....

                    folgendes Item
                    Code:
                            [[[Heute]]]
                                type = num
                                eval = sh.EZ.E_Minus() - sh.EZ.E_Minus.db('max', sh.minute.since.midnight.dbstr(), sh.minute.since.midnight.dbstr())
                                crontab = 0,30 * * * = 1
                                sqlite = yes
                                cache = yes

                    liefert folgenden LOG Eintrag.
                    Es handelt sich um HEUTE also sollte eigentlich auch ein Ergebnis vorhanden sein, jedoch handelt es sich bei diesem Item um den Wert der Einspeisung ins Netz meiner PV Anlage. Heute ist das scheinbar noch nicht geschehen bzw. passiert das natürlich auch nicht in der Nacht. Kann ich crontab nur auf TAG (env.location.day == 1) beschränken?

                    Code:
                    2016-11-17 10:00:00 WARNING EZ.E_Minus.Heute-eval Item EZ.E_Minus.Heute: problem evaluating sh.EZ.E_Minus() - sh.EZ.E_Minus.db('max', sh.minute.since.midnight.dbstr(), sh.minute.since.midnight.dbstr()): unsupported operand type(s) for -: 'float' and 'NoneType'

                    Kommentar


                      #11
                      Hallo zusammen,

                      ich erhalte den kWh-Stand sowie die aktuelle Leistung vom Stromzähler über einen USB-Lesekopf ( SHNG läuft auf einem RasPi).

                      ITEM:
                      Code:
                      strom:
                          werte:
                              bezug_gesamt: 
                                  type: num
                                  sml_obis: 1-0:1.8.0*255 # Summe Zählerstände Tarife T1 + T2 (in Wh)       
                                  sml_prop: valueReal
                                  # eval: sh.strom.werte.bezug_gesamt() / 1000
                                  eval: round(value / 1000, 2)
                                  database: init
                      
                              leistung:
                                  type: num
                                  sml_obis: 1-0:16.7.0*255 # Momentane Leistung (in W)
                                  sml_prop: valueReal
                                #  eval: round(value * 1, 2)
                                  eval: round(value, 2)
                                  database: init
                      Das funktioniert prima.

                      Allerdings würde ich den "bezug_gesamt" gerne zu festgelegten Zeiten in die Datenbank schreiben, und idealerweise davon Verbrauch letzte 24h letzte Woche, ... berechnen.

                      Dazu habe ich folgendes versucht... um nur zu festen Zeiten Werte zu erhalten ... leider hat das nicht geklappt.

                      Code:
                      stromzaehler:
                          werte:
                              auswertung:
                                  type: num
                                  sml_obis: 1-0:1.8.0*255 # Summe Zählerstände Tarife T1 + T2 (in Wh)
                                  sml_prop: valueReal
                                  plot:
                                      type: num
                                      database: init
                                      eval: round(sh.stromzaehler.werte.auswertung() / 1000, 2)
                                      eval_trigger: stromzaehler.werte.auswertung.interval
                                  interval:
                                      type: num
                                      # crontab: '0 0,6,12,18 * * * = 1' # 0:00 6:00 12:00 18:00
                                      crontab: '0 0,3,6,9,12,15,18,21 * * * = 1' # 0:00 3:00 6 9 12 15 18 21
                                      #crontab: '* * * * = 1' ## jede Minute
                                      
                                      
                                      enforce_updates: true

                      Ich hoffe Ihr könnt mir weiterhelfen. Danke

                      Kommentar


                        #12
                        Du kannst es eigentlich auch so wie fast jeder hier machen, permanent die daten in die db schreiben und dann in subitems mit eval und eval_trigger dir die verbräuche berechnen

                        Kommentar


                          #13
                          Zitat von Bonze Beitrag anzeigen
                          wie fast jeder hier machen...
                          Bin mir fast sicher das der Großteil so eine Funktion umgesetzt hat

                          Code:
                          eval: round((sh.stromzaehler.werte.auswertung() / 1000, 2)-(sh.stromzaehler.werte.auswertung.wertausderDatenbankder24Stundenaltist))
                          wird wohl nicht funktionieren

                          Kommentar


                            #14
                            also
                            post#3 erklärt es doch schon ganz gut

                            shNG gibt dirverschiedene date items d.h. sowas wie date.minutes.since.midnight()
                            damit kann man dann, mit zuhilfenahme des datenbank plugins, in welcher deine Zählerwerte ja gespeichert sind abfragen machen..

                            dann ist sowas
                            aktuell:
                            type . num
                            database : 'true'
                            cache : on
                            eval : sh.ehz.haus() - sh.ehz.haus.db('max', '1d', sh.minute.since.midnight.dbstr())
                            eval_trigger : ehz.haus
                            der Tagesverbrauch berechnet sich wie folgt, aktueller Verbrauch(Zählerstand) - der kleineste Zählerstand in der Zeitspanne von 0Uhr bis jetzt)
                            Da der zähller ja nur größer zählt..

                            ehz.haus ist das Zähler item, dieses triggert dann alle verbrauchsitems nach

                            Kommentar


                              #15
                              Das hier könnte helfen: https://knx-user-forum.de/forum/supp...28#post1698028

                              Kommentar

                              Lädt...
                              X