Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbrauchshistorien - Logik Berechnet falsch

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

    Verbrauchshistorien - Logik Berechnet falsch

    Guten Abend zusammen

    ich nutze eine Logik um den Tagesverbrauch sowie den Monatsverbrauch abzubilden.

    Nun ist das Problem das er den Monatsverbrauch vom aktuellen Monat wie folgt berechnet - Aktueller Tag + gestriger Verbrauch.

    Die Logik ist wie folgt aufgebaut:


    PHP-Code:
    #!/usr/bin/env python3
    # kostenmonat.py
    # Berechne die Anzahl der Stunden seit Monatsbeginn
    Tage = datetime.datetime.now().day
    Tag 
    = datetime.date.today().day
    Stunden 
    = datetime.datetime.now().hour
    Monatsstunden 
    = (Tage * 24) + Stunden
    start 
    = str(Monatsstunden) + 'h'
    Monat = (datetime.date.today() - datetime.timedelta(1)).strftime("%B")
    from lib.item import Items
    items 
    = Items.get_instance()
    item = sh.return_item('Messung.Strom.Verbrauch.' + Monat)


    # Berechne die Stromkosten sowie den vebrauch des aktuellen Monats und schreibe das Ergebnis in ein Item
    sh.Messung.Strom.Monatsverbrauch(sh.Messung.Strom.Bezug() - sh.Messung.Strom.Bezug.db('min', start))
    sh.Messung.Strom.KostenMonat(round(sh.Messung.Strom.Monatsverbrauch()*0.32 + (144/12)),2)
    item(sh.Messung.Strom.Bezug.db('min', start))​ 
    Ich denke irgendwo ist da noch ein kleiner Bug drinnen - weiss aber nicht wo ich suchen soll
    Gruss Oliver

    Projektleiter Technische Gebäudeausrüstung

    #2
    Zitat von jonny7792 Beitrag anzeigen
    from lib.item import Items
    items
    = Items.get_instance()
    Ohne Dein Problem nachvollzogen zu haben: Was sollen die beiden Zeilen da? Die gehören nicht in eine Logik, sondern in Python Code des Core oder höchstens noch in ein Plugin.

    Zitat von jonny7792 Beitrag anzeigen
    Nun ist das Problem das er den Monatsverbrauch vom aktuellen Monat wie folgt berechnet - Aktueller Tag + gestriger Verbrauch.
    Was ist daran das Problem? Das verstehe ich nicht.

    Zitat von jonny7792 Beitrag anzeigen
    Ich denke irgendwo ist da noch ein kleiner Bug drinnen
    Wenn Du nicht beschreibst was Du als Ergebnis erwartest und und was Du als Ergebnis erhältst, bleibt bei mir die Glaskugel trübe.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Guten Morgen Martin

      Die Problematik ist wie folgt :

      31.Januar 50kwh Verbrauch 01 Februar 50 Kwh Verbrauch

      Aktueller Monat 100 Kwh Verbrauch.

      Weshalb er bei der Berechnung der historischen Werte den letzten Tag des vorherigen Monats benutzt ist für mich nicht nachvollziehbar.

      ich erwarte wirklich nur den Verbrauch vom aktuellen Monat und nicht noch einen Tag vom bergigen dazu - dies verfälscht die ganzen Ergebnisse

      Das mit den beiden Zeilen war mir nicht so bewusst . Dementsprechend entferne ich sie



      Danke und Gruss
      Gruss Oliver

      Projektleiter Technische Gebäudeausrüstung

      Kommentar


        #4
        jonny7792

        Vielleicht ist das Plugin hier https://knx-user-forum.de/forum/supp...tere-testphase was für Dich.
        Das kann zumindest den Verbrauch von Zeiträumen ermitteln. Die Berechnung der Kosten sollte dann mit einem eval machbar sein.

        Kommentar


          #5
          Wozu berechnest Du Tag? Du benutzt den Wert in der Logik nicht.

          Deine Berechnung für Stunden ist falsch:
          Wenn ich für jetzt (2.2.2023 12:55) nach Deiner Formel Stunden berechne, kommt 60 raus. So viele Stunden sind im Februar aber noch nicht vergangen.
          Viele Grüße
          Martin

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

          Kommentar


            #6
            Ich dachte es sei richtig , dementsprechend ergibt es natürlich Sinn das das Ergebniss falsch ist.
            wie wäre den die korrekte Formel ?
            Gruss Oliver

            Projektleiter Technische Gebäudeausrüstung

            Kommentar


              #7
              Einen Tag weniger nehmen. Am 2. Februar um 12 Uhr sind nicht 2 Tage und 12 Stunden im Februar vergangen, sondern nur 1 Tag und 12 Stunden, also nicht 60, sondern 36 Stunden. Darauf hättest Du nach meinem Hinweis auch selbst kommen können.

              Viele Grüße
              Martin

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

              Kommentar


                #8
                Zitat von Msinn Beitrag anzeigen
                Am 2. Februar um 12 Uhr sind nicht 2 Tage und 12 Stunden im Februar vergangen, sondern nur 1 Tag und 12 Stunden...

                Hallo Martin

                ich bin kein Python Guru - ich stehe wirklich auf dem Schlauch...
                Gruss Oliver

                Projektleiter Technische Gebäudeausrüstung

                Kommentar


                  #9
                  Zitat von jonny7792 Beitrag anzeigen
                  ich bin kein Python Guru - ich stehe wirklich auf dem Schlauch...
                  Code:
                  Tage = datetime.datetime.now().day
                  ergibt (für heute) 3
                  Code:
                  Stunden = datetime.datetime.now().hour​
                  ergibt (für jetzt) 11
                  Code:
                  Monatsstunden = (Tage * 24) + Stunden
                  ergibt dann (für jetzt) 3*24 + 11 --> und das ist falsch, weil jetzt erst 2 volle Tage und 11 h seit Monatsbeginn vergangen sind.

                  d.h., wenn du das so berechnen willst, dann (
                  Code:
                  Monatsstunden = (Tage -1) * 24 + Stunden
                  .... und das hat nichts mit Python zu tun.

                  Beste Grüße
                  Michael

                  BTW: Hast Du schon mal in die Doku geschaut: https://smarthomeng.github.io/smarth...zeitdaten.html

                  Kommentar


                    #10
                    Zitat von jonny7792 Beitrag anzeigen
                    ich bin kein Python Guru - ich stehe wirklich auf dem Schlauch...

                    Das hat überhaupt nichts mit Python zu tun. Solange Du mit einem Bleistift, einem Zettel und ein wenig Gehirneinsatz nicht auf die richtige Lsung kommst, brauchst Du den Computer noch nicht mal einzuschalten.

                    Wenn Du (wie als Beispiel weiter oben erwähnt) 2 Tage abzieht, bist Du am 31 Januar. Du möchtest aber den Zeitpunkt des Monatsanfangs bestimmen, also den 1. Februar. Also: Zu ziehst einen Tag zu viel ab.

                    Viele Grüße
                    Martin

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

                    Kommentar


                      #11

                      Hab es zum laufen gebracht , jedoch habe ich nun das Problem das wenn ich SHNG neu starte die Werte weg sind

                      Screenshot 2023-02-05 092218.png

                      Woran könnte das liegen?

                      Items sind wie folgt definiert:

                      PHP-Code:
                      Messung:
                          
                      Strom:
                              
                      Bezug:
                                  
                      type: num
                                  knx_dpt
                      : 13
                                  knx_listen
                      : 1/6/21
                                  
                      eval: value/1000
                                  database
                      : yes
                              Tagesverbrauch
                      :
                                  
                      type: num
                                  database
                      : yes
                                  
                      eval: round(value, 2)
                                  
                      cache: true
                              Monatsverbrauch
                      :
                                  
                      type: num
                                  database
                      : yes
                                  
                      eval: round(value, 2)
                                  
                      cache: true
                              Lieferung
                      :
                                  
                      type: num
                                  knx_dpt
                      : 13
                                  knx_listen
                      : 1/6/23
                                  
                      eval: value/1000
                                  database
                      : yes
                              Tagesexport
                      :
                                  
                      type: num
                                  database
                      : yes
                                  cache
                      : true
                              Monatsexport
                      :
                                  
                      type: num
                                  database
                      : yes
                                  cache
                      : true
                              KostenMonat
                      :
                                  
                      type: num
                                  database
                      : yes
                                  cache
                      : true
                              KostenTag
                      :
                                  
                      type: num
                                  database
                      : yes
                                  cache
                      : true
                              Verbrauch
                      :
                                  
                      Januar:
                                      
                      type: num
                                      database
                      : yes
                                  Februar
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Maerz
                      :
                                      
                      type: num
                                      database
                      : yes
                                  April
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Mai
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Juni
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Juli
                      :
                                      
                      type: num
                                      database
                      : yes
                                  August
                      :
                                      
                      type: num
                                      database
                      : yes
                                  September
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Oktober
                      :
                                      
                      type: num
                                      database
                      : yes
                                  November
                      :
                                      
                      type: num
                                      database
                      : yes
                                  Dezember
                      :
                                      
                      type: num
                                      database
                      : yes
                              SpannungL1
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/11
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              SpannungL2
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/12
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              SpannungL3
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/13
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              LeistungsfaktorL1
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/17
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              LeistungsfaktorL2
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/18
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              LeistungsfaktorL3
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/19
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungposL1
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/30
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungposL2
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/31
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungposL3
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/32
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungnegL1
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/33
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungnegL2
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/34
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              BlindleistungnegL3
                      :
                                  
                      type: num
                                  knx_listen
                      : 1/6/35
                                  knx_dpt
                      : 14
                                  database
                      : yes
                              Blindenergiepos
                      :
                                  
                      type: num
                                  knx_dpt
                      : 13
                                  knx_listen
                      : 1/6/25
                                  
                      eval: value/1000
                                  database
                      : yes
                              Blindenergieneg
                      :
                                  
                      type: num
                                  knx_dpt
                      : 13
                                  knx_listen
                      : 1/6/27
                                  
                      eval: value/1000
                                  database
                      : yes​ 
                      Gruss Oliver

                      Projektleiter Technische Gebäudeausrüstung

                      Kommentar


                        #12
                        Lies Dir mal die Doku zum Item Handling in SmartHomeNG und/oder zum database Plugin durch.

                        Die Items in SmartHomeNG werden beim Start leer Initialisiert. Wenn Du das anders haben möchtest, musst Du das konfigurieren. Dazu gibt es ein Standardattribut der Items. Alternativ kannst Du das Item auch aus der Datenbank initialisieren. Dazu musst Du die Item Attribute des database Plugins entsprechend konfigurieren.
                        Viele Grüße
                        Martin

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

                        Kommentar

                        Lädt...
                        X