Ankündigung

Einklappen

Aufruf

Bitte helft bei unserer Spendenaktion: Spendenaktion Helmut Lintschinger
Mehr anzeigen
Weniger anzeigen

Eval Trigger für Historische Verbauchswerte

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

    Eval Trigger für Historische Verbauchswerte

    Hallo,

    ich möchte gerne meinen Tagesverbrauch "berechnen Aufgrund von Zählerständen.

    Jedoch weis ich nicht wie ich das Zusammen Basteln soll. Der Zähler Liefert mir folgende Daten auf den Bus:


    Zählerstand Tarif 1 ( HT )
    Zählerstand Tarif 2 ( NT )
    Zählerstand Gesammt ( HT+NT )

    Jetzt möchte ich gerne einmal den Tagesverauch, Verbrauch gestern ,Aktuellen Monat sowie den Vormonat und die Geschätzten Kosten in der Visu Darstellen lassen.

    Jedoch komme ich mit den eval Ausrücken nicht ganz Klar wie diese zu definieren sind im Anhang die Items vom Stromzähler



    Items.yaml der betreffenden Punkte


    Code:
    Bezug:
        EnergieHT:
            type: num
            database: 'yes'
            knx_dpt: 13
            knx_init: 5/5/1
            knx_listen: 5/5/1
        EnergieNT:
            type: num
            database: 'yes'
            knx_dpt: 13
            knx_init: 5/5/2
            knx_listen: 5/5/2
        Gesammt:
            type: num
            database: 'yes'
            knx_dpt: 13
            knx_init: 5/5/3
            knx_listen: 5/5/3
        TagNT:
            type: num
            database: 'yes'
            knx_dpt: 13
            eval: sh.Bezug.EnergieNT.db('max', '1i')-sh.Bezug.EnergieNT.db('max', '1d','1d')
            eval_trigger: Bezug.EnergieNT
        TagHT:
            type: num
            database: 'yes'
            knx_dpt: 13
            eval: sh.Bezug.EnergieHT.db('max', '1i')-sh.Bezug.EnergieHT.db('max', '1d','1d')
            eval_trigger: Bezug.EnergieHT
        Tagesverbrauch:
            type: num
            database: 'yes'
            knx_dpt: 13
            eval: sh.Bezug.TagHT() + sh.Bezug.TagNT()
            eval_trigger: Bezug.TagHT | Bezug.TagNT
        Vortagesverbrauch:
            type: num
            database: 'yes'
            knx_dpt: 13
            eval: sh.Bezug.VortagesverbrauchHT() + sh.Bezug.VortagesverbrauchNT()
            eval_trigger: Bezug.VortagesverbrauchHT | Bezug.VortagesverbrauchNT
        VortagesverbrauchHT:
            type: num
            database: 'yes'
            knx_dpt: 13
            crontab: 1 0 * * = 1
            eval: round((sh.Bezug.EnergieHT.db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh.Bezug.EnergieHT.db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i')) , 2)
            eval_trigger: Bezug.EnergieHT
        VortagesverbrauchNT:
            type: num
            database: 'yes'
            knx_dpt: 13
            crontab: 1 0 * * = 1
            eval: round((sh.Bezug.EnergieNT.db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh.Bezug.EnergieNT.db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i')) , 2)
            eval_trigger: Bezug.EnergieNT
        MonatsverbrauchHT:
            type: num
            cache: true
            database: 'yes'
            crontab: 0 0 1 * = 1
            eval: sh.Bezug.EnergieHT() - sh.Bezug.EnergieHT.db('max', '1m', '1m')
        MonatsverbrauchNT:
            type: num
            cache: true
            database: 'yes'
            crontab: 0 0 1 * = 1
            eval: sh.Bezug.EnergieNT() - sh.Bezug.EnergieNT.db('max', '1m', '1m')
        AktuellKW:
            type: num
            eval: value / 1000
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/1/4
            knx_listen: 5/1/4
        AmpereL1:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/4/1
            knx_listen: 5/4/1
        AmpereL2:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/4/2
            knx_listen: 5/4/2
        AmpereL3:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/4/3
            knx_listen: 5/4/3
        SpannungL1:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/3/1
            knx_listen: 5/3/1
        SpannungL2:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/3/2
            knx_listen: 5/3/2
        SpannungL3:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/3/3
            knx_listen: 5/3/3
        PowerL1:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/1/1
            knx_listen: 5/1/1
        PowerL2:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/1/2
            knx_listen: 5/1/2
        PowerL3:
            type: num
            database: 'yes'
            knx_dpt: 14
            knx_init: 5/1/3
            knx_listen: 5/1/3
        KostenMonatHT:
            type: num
            database: 'yes'
            eval: round((sh.Bezug.MonatsverbrauchHT())*0.2164 + (64.62/365),2)
            eval_trigger: Bezug.MonatsverbrauchHT
        KostenMonatNT:
            type: num
            database: 'yes'
            eval: round((sh.Bezug.MonatsverbrauchNT())*0.1652 + (64.62/365),2)
            eval_trigger: Bezug.MonatsverbrauchNT
        KostenHTNT:
            type: num
            database: 'yes'
            eval: sh.Bezug.KostenMonatHT() + sh.Bezug.KostenMonatNT()
            eval_trigger: Bezug.EnergieHT | Bezug.EnergieNT
        KostenTagHT:
            type: num
            database: 'yes'
            eval: round((sh.Bezug.TagHT())*0.1652 + (64.62/365),2)
            eval_trigger: Bezug.TagHT
        KostenTagNT:
            type: num
            database: 'yes'
            eval: round((sh.Bezug.TagNT())*0.1652 + (64.62/365),2)
            eval_trigger: Bezug.TagNT
        KostenTagHTNT:
            type: num
            database: 'yes'
            eval: sh.Bezug.KostenTagHT() + sh.Bezug.KostenTagNT()
            eval_trigger: Bezug.TagNT | Bezug.TagNT
    Zuletzt geändert von jonny7792; 22.04.2019, 21:45.
    Gruss Oliver

    Projektleiter Technische Gebäudeausrüstung

    #2
    Da
    Code:
    sh.Bezug.EnergieNT.db('max', '1m', '1m')
    Fehler liefern kann, ist es vermutlich besser, das Ganze in einer Logik zu lösen, die ein Fehlerhandling ermöglicht.

    Du kannst z.B. bei der Datenbank Abfrage testen ob das Ergebnis None ist (kein Wert entspricht den Bedingungen), bevor Du den Wert weiterverarbeitest.

    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Zitat von Msinn Beitrag anzeigen
      Code:

      sh.Bezug.EnergieNT.db('max', '1m', '1m')
      Er Liefert tatsächlich etwas : None


      Jetzt wäre die Frage wie einfach kann man die Logik aufbauen sodass ich Tageswerte sowie Monatswerte erhalten kann.

      Alle Werte werden in eine Database geschrieben sodass diese inkl. Zeitstempel vorhanden sein sollten
      Gruss Oliver

      Projektleiter Technische Gebäudeausrüstung

      Kommentar


        #4
        Der Aufruf liefert vermutlich None, weil in der Datenbank keine Daten für den vorletzen Monat gefunden werden.

        Ich habe mir mal die Berechnung des Items Bezug.MonatsverbrauchHT herausgegriffen (ohne im Detail nachzuvollziehen was Du damit berechnen willst). Du berechnest per eval:

        Code:
        Bezug:
             MonatsverbrauchHT:
                  type: num
                 cache: true
                 database: 'yes'
                 crontab: 0 0 1 * = 1
                eval: sh.Bezug.EnergieHT() - sh.Bezug.EnergieHT.db('max', '1m', '1m')
        Du könntest als Ersatz eine Logik anlegen, die mit der gleichen crontab Angabe getriggert wird:

        Code:
        temp_energie_ht = sh.Bezug.EnergieHT.db('max', '1m', '1m')
        if temp_energie_ht is None:
            temp_energie_ht = 0
        
        sh.Bezug.MonatsverbrauchHT(sh.Bezug.EnergieHT() - temp_energie_ht)
        Damit wird das gleiche erreicht wie mit Deinem eval. Du kannst nur zusätzlich ein Fehlerhandling einbauen (Falls die Datenbank nichts liefert, den Wert 0 annehmen).

        EIne Logik hat mehrere Vorteile gegenüber einem eval Attribut:
        • Du kannst z.B. bei Bedarf Logeinträge schreiben.
        • Außerdem kannst Du eine Logik verändern und neu Laden ohne SmartHomeNG komplett neu starten zu müssen. Wenn Du ein eval anpasst, musst Du SmartHomeNG neu starten, damit die Änderung wirksam wird.
        • Du kannst wie oben gezeigt, ein Errorhanding einbauen
        • Du kannst aus dem Backend die Logik auslösen/triggern (unabhängig von definierten Triggern wie crontab oder watch_item)
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Nochmals hallo von meiner Seite aus!

          Erstmal danke an psilo im Gitter Channel - Ich konnte einiges fixxen.



          So da ich nun die Ausgabe der Zählerstände in wh anstatt kw/h erhalte habe ich meine Items angepasst siehe :


          Code:
          
          Bezug:
              EnergieHT:
                  type: num
                  database: init
                  knx_dpt: 13
                  knx_init: 5/5/8
                  knx_listen: 5/5/8
                  eval: value / 1000
              EnergieNT:
                  type: num
                  database: init
                  knx_dpt: 13
                  knx_init: 5/5/9
                  knx_listen: 5/5/9
                  eval: value / 1000
              Gesammt:
                  type: num
                  database: init
                  knx_dpt: 13
                  knx_init: 5/5/10
                  knx_listen: 5/5/10
                  eval: value / 1000
              Vortagesverbrauch:
                  type: num
                  database: init
                  knx_dpt: 13
                  eval: sh.Bezug.VortagesverbrauchHT() + sh.Bezug.VortagesverbrauchNT() | value / 1000
                  eval_trigger: Bezug.VortagesverbrauchHT | Bezug.VortagesverbrauchNT
              VortagesverbrauchHT:
                  type: num
                  database: init
                  knx_dpt: 13
                  eval: int(sh.Bezug.EnergieHT.db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh.Bezug.EnergieHT.db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i'))
                  eval_trigger: Bezug.EnergieHT
              VortagesverbrauchNT:
                  type: num
                  database: init
                  knx_dpt: 13
                  eval: int(sh.Bezug.EnergieNT.db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh.Bezug.EnergieNT.db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i'))
                  eval_trigger: Bezug.EnergieNT
              TagesverbrauchNT:
                  type: num
                  database: init
                  knx_dpt: 13
                  crontab: 0 6 * * | 0 12 * * | 0 18 * * | 0 23 59 *
                  eval: sh.Bezug.EnergieHT.db('max', sh.time.minute.since.midnight.dbstr(), 'now') - sh.Bezug.EnergieHT.db('min', sh.time.minute.since.midnight.dbstr(), 'now')
                  eval_trigger: Bezug.EnergieNT
              TagesverbrauchHT:
                  type: num
                  database: init
                  knx_dpt: 13
                  crontab: 0 6 * * | 0 12 * * | 0 18 * * | 0 23 59 *
                  eval: sh.Bezug.EnergieHT.db('max', sh.time.minute.since.midnight.dbstr(), 'now') - sh.Bezug.EnergieHT.db('min', sh.time.minute.since.midnight.dbstr(), 'now')
                  eval_trigger: Bezug.EnergieHT
              Tagesverbrauch:
                  type: num
                  database: init
                  knx_dpt: 13
                  eval: sh.Bezug.TagesverbrauchHT() + sh.Bezug.TagesverbrauchNT()
                  eval_trigger: Bezug.TagesverbrauchHT | Bezug.TagesverbrauchNT
                  crontab: 0 6 * * | 0 12 * * | 0 18 * * | 0 23 59 *
              AktuellKW:
                  type: num
                  eval: value / 1000
                  database: init
                  knx_dpt: 14
                  knx_init: 5/1/4
                  knx_listen: 5/1/4
              AmpereL1:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/4/1
                  knx_listen: 5/4/1
              AmpereL2:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/4/2
                  knx_listen: 5/4/2
              AmpereL3:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/4/3
                  knx_listen: 5/4/3
              SpannungL1:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/3/1
                  knx_listen: 5/3/1
              SpannungL2:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/3/2
                  knx_listen: 5/3/2
              SpannungL3:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/3/3
                  knx_listen: 5/3/3
              PowerL1:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/1/1
                  knx_listen: 5/1/1
              PowerL2:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/1/2
                  knx_listen: 5/1/2
              PowerL3:
                  type: num
                  database: init
                  knx_dpt: 14
                  knx_init: 5/1/3
                  knx_listen: 5/1/3
              KostenGesternHT:
                  type: num
                  database: init
                  eval: round((sh.Bezug.VortagesverbrauchHT())*0.2164 + (64.62/365),2)
                  eval_trigger: Bezug.VortagesverbrauchHT
                  crontab: 1 0 * * = 1
              KostenGesternNT:
                  type: num
                  database: init
                  eval: round((sh.Bezug.VortagesverbrauchNT())*0.1652 + (64.62/365),2)
                  eval_trigger: Bezug.VortagesverbrauchNT
                  crontab: 1 0 * * = 1
              KostenGesternHTNT:
                  type: num
                  database: init
                  eval: sh.Bezug.KostenGesternHT() + sh.Bezug.KostenGesternNT()
                  eval_trigger: Bezug.KostenGesternHT | Bezug.KostenGesternNT
                  crontab: 1 0 * * = 1
              KostenHeuteHT:
                  type: num
                  database: init
                  eval: round((sh.Bezug.TagesverbrauchHT())*0.2164 + (64.62/365),2)
                  eval_trigger: Bezug.TagesverbrauchHT
              KostenHeuteNT:
                  type: num
                  database: init
                  eval: round((sh.Bezug.TagesverbrauchNT())*0.1652 + (64.62/365),2)
                  eval_trigger: Bezug.TagesverbrauchNT
              KostenHeuteHTNT:
                  type: num
                  database: init
                  eval: sh.Bezug.KostenHeuteHT() + sh.Bezug.KostenHeuteNT()
                  eval_trigger: Bezug.KostenHeuteHT | Bezug.KostenHeuteNT

          Jedoch erhalte ich nun die Werte für : Verbauch Heute: 1679067 noch in Wh anstatt Kw/h wie ist nun der eval passend zu setzen dass ich die Werte ebenfalls in kw/h erhalte ( Die Werte passen noch nicht da für heute ja noch kein Maxwert um 23.59 oder ähnlich vorhanden ist - Ich hoffe das es morgen dann passen wird )

          Code:
          
          Tagesverbrauch:
                  type: num
                  database: init
                  knx_dpt: 13
                  eval: sh.Bezug.TagesverbrauchHT() + sh.Bezug.TagesverbrauchNT() / 1000   -- Brachte keine Änderung mit sich
                  eval_trigger: Bezug.TagesverbrauchHT | Bezug.TagesverbrauchNT
                  crontab: 0 6 * * | 0 12 * * | 0 18 * * | 0 23 59 * -- Benötige ich den crontab? Da es ja vom item Bezug.TagesverbrauchHT bzw NT getriggert wird



          Vielen Dank an euch
          Gruss Oliver

          Projektleiter Technische Gebäudeausrüstung

          Kommentar


            #6
            ich möchte die tiefste Temperatur welche seit Mitternacht gemessen wurde anzeigen.


            hab damit jedoch ein Problem: 'SmartHome' object has no attribute 'time'

            Code:
            2019-12-03  21:56:27 WARNING  lib.item          Item Wetterstation.Temperatur.Tag_min: problem evaluating sh.Wetterstation.Temperatur.db('min', sh.time.minute.since.midnight.dbstr()): 'SmartHome' object has no attribute 'time'
            Code:
            Wetterstation:
               Temperatur:
                    type: num
                    visu: 'yes'
                    cache: 'True'
                    database: 'yes'
                    visu_acl: ro
                    knx_dpt: 9
                    knx_listen: 0/2/5
                    Tag_min:
                        type: num
                        visu_acl: ro
                        cache: 'True'
                        eval_trigger: Wetterstation.Temperatur
                        eval: sh.Wetterstation.Temperatur.db('min', sh.time.minute.since.midnight.dbstr())

            muss ich für sh.time.minute.since.midnight.dbstr() in SH noch etwas einbauen?


            Kommentar


              #7
              Was soll sh.time deiner Meinung nach sein?
              Meinst du vielleicht sowas wie unter https://www.smarthomeng.de/user/logi...zeitdaten.html beschrieben?
              Um dies nur ein einzelnes mal zu nutzen, würde ich aber dieses ganze Konstrukt massiv übertrieben finden.

              Kommentar


                #8
                alles klar.. für sh.time braucht es die relativ aufwendige Logik,..
                danke!

                Kommentar


                  #9
                  so klappt es nun ohne Logik

                  Code:
                  Wetterstation:
                    Temperatur:
                          type: num
                          visu: 'yes'
                          cache: 'True'
                          sqlite: 'yes'
                          database: 'yes'
                          visu_acl: ro
                          knx_dpt: 9
                          knx_listen: 0/2/5
                          telegram_info: wetter
                          Tag_min:
                              type: num
                              visu_acl: ro
                              cache: 'True'
                              eval_trigger: Wetterstation.Temperatur
                              eval: sh.Wetterstation.Temperatur.db('min', str((datetime.datetime.now().hour*60)+datetime.datetime.now().minute)+'i')
                              telegram_info: wetter

                  Kommentar

                  Lädt...
                  X