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

  • ivande
    antwortet
    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

    Einen Kommentar schreiben:


  • ivande
    antwortet
    alles klar.. für sh.time braucht es die relativ aufwendige Logik,..
    danke!

    Einen Kommentar schreiben:


  • smai
    antwortet
    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.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    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?


    Einen Kommentar schreiben:


  • jonny7792
    antwortet
    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

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    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)

    Einen Kommentar schreiben:


  • jonny7792
    antwortet
    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

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    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.

    Einen Kommentar schreiben:


  • jonny7792
    hat ein Thema erstellt Eval Trigger für Historische Verbauchswerte

    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.
Lädt...
X