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:
                                  
                      typenum
                                  knx_dpt
                      13
                                  knx_listen
                      1/6/21
                                  
                      eval: value/1000
                                  database
                      yes
                              Tagesverbrauch
                      :
                                  
                      typenum
                                  database
                      yes
                                  
                      eval: round(value2)
                                  
                      cachetrue
                              Monatsverbrauch
                      :
                                  
                      typenum
                                  database
                      yes
                                  
                      eval: round(value2)
                                  
                      cachetrue
                              Lieferung
                      :
                                  
                      typenum
                                  knx_dpt
                      13
                                  knx_listen
                      1/6/23
                                  
                      eval: value/1000
                                  database
                      yes
                              Tagesexport
                      :
                                  
                      typenum
                                  database
                      yes
                                  cache
                      true
                              Monatsexport
                      :
                                  
                      typenum
                                  database
                      yes
                                  cache
                      true
                              KostenMonat
                      :
                                  
                      typenum
                                  database
                      yes
                                  cache
                      true
                              KostenTag
                      :
                                  
                      typenum
                                  database
                      yes
                                  cache
                      true
                              Verbrauch
                      :
                                  
                      Januar:
                                      
                      typenum
                                      database
                      yes
                                  Februar
                      :
                                      
                      typenum
                                      database
                      yes
                                  Maerz
                      :
                                      
                      typenum
                                      database
                      yes
                                  April
                      :
                                      
                      typenum
                                      database
                      yes
                                  Mai
                      :
                                      
                      typenum
                                      database
                      yes
                                  Juni
                      :
                                      
                      typenum
                                      database
                      yes
                                  Juli
                      :
                                      
                      typenum
                                      database
                      yes
                                  August
                      :
                                      
                      typenum
                                      database
                      yes
                                  September
                      :
                                      
                      typenum
                                      database
                      yes
                                  Oktober
                      :
                                      
                      typenum
                                      database
                      yes
                                  November
                      :
                                      
                      typenum
                                      database
                      yes
                                  Dezember
                      :
                                      
                      typenum
                                      database
                      yes
                              SpannungL1
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/11
                                  knx_dpt
                      14
                                  database
                      yes
                              SpannungL2
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/12
                                  knx_dpt
                      14
                                  database
                      yes
                              SpannungL3
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/13
                                  knx_dpt
                      14
                                  database
                      yes
                              LeistungsfaktorL1
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/17
                                  knx_dpt
                      14
                                  database
                      yes
                              LeistungsfaktorL2
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/18
                                  knx_dpt
                      14
                                  database
                      yes
                              LeistungsfaktorL3
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/19
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungposL1
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/30
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungposL2
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/31
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungposL3
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/32
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungnegL1
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/33
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungnegL2
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/34
                                  knx_dpt
                      14
                                  database
                      yes
                              BlindleistungnegL3
                      :
                                  
                      typenum
                                  knx_listen
                      1/6/35
                                  knx_dpt
                      14
                                  database
                      yes
                              Blindenergiepos
                      :
                                  
                      typenum
                                  knx_dpt
                      13
                                  knx_listen
                      1/6/25
                                  
                      eval: value/1000
                                  database
                      yes
                              Blindenergieneg
                      :
                                  
                      typenum
                                  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