Ankündigung

Einklappen
Keine Ankündigung bisher.

Stromverbrauch "plot.period" wie sinnvoll darstellen - Tageswert(e)?

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

    Stromverbrauch "plot.period" wie sinnvoll darstellen - Tageswert(e)?

    Guten Abend,

    nachdem der Stromzähler brav seine Werte ausgibt (vgl. https://knx-user-forum.de/forum/supp...e4#post1720341 )

    *gibt es die Möglichkeit Werte auf 1 bis 2 Stellen hinter dem Komma zu begrenzen --> alternativ auch gar keine Nachkommastelle*

    und in die Datenbank schreibt, müssen diese natürlich genutzt werden.

    Ein paar Gedanken hierzu:
    1. wieviele "Messpunkte" pro Tag würdet ihr speichern
      • nur einen Wert (z.B. 0:00 Uhr)
      • zwei Werte (0:00 und 12:00)
      • 4 Werte (0:00 6:00 12:00 18:00)
      • x Werte ?
    2. da der Wert sich immer aufaddiert muss eine Berechnung her --> kommt zurück auf Punkt 1. --> Wert_heute (Uhrzeit heute) - Wert_gestern (Uhrzeit gleich Uhrzeit heute) = Wert für die Datenbank
    3. hat das schon jemand umgesetzt ---> gerne Screenshot/Code hochladen.

    Danke euch

    #2
    Zitat von Maexle Beitrag anzeigen
    *gibt es die Möglichkeit Werte auf 1 bis 2 Stellen hinter dem Komma zu begrenzen
    für die Nachwelt...

    Code:
    round (value, 2)

    Zuletzt geändert von Maexle; 22.12.2021, 10:49.

    Kommentar


      #3
      Gerade ist mir aufgefallen das einmal ein "." als Komma und im anderen Block ein "," als Komma verwendet wird. vgl. Bild

      Komma.png

      Im Item Baum werden beide werte mit Punkt angezeigt --> ist es möglich bei den kWh ein Komma einzustellen?

      Kommentar


        #4
        Ohne Info, wie Du den Wert ausgibst, kann ich nur raten
        Vorausgesetzt, der Wert wird als Zahlenwert an SV übergeben und Du gibst ihn mit basic.print aus:
        In der ./lang/de.ini ist die Einheit "kwh" mit Komma hinterlegt. Du musst dies mit kleinem "w" angeben.

        Gruß
        Wolfram

        Kommentar


          #5
          wvhn
          Asche auf mein Haupt - aber meine Glaskugel ist kaputt und daher wusste ich nicht, dass Deine ebenfalls defekt ist *Spaß beiseite*

          Hier die Infos: Ich hoffe da ist alles dabei.

          SmartHomeNG Version:1.8.2.master
          Raspberry Pi 3 Model B+ v1.3, 1GB (Sony, UK)

          Code:
          # strom_werte.yaml
          
          strom:
              werte:
                  bezug_gesamt:
                      type: num
                      sml_obis: 1-0:1.8.0*255 # Summe Zählerstände Tarife T1 + T2 (in Wh)
                      # eval: sh.strom.werte.bezug_gesamt() / 1000          
                      sml_prop: valueReal
                      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
          Code:
          {{ basic.print('', 'strom.werte.bezug_gesamt', 'kWh Zählerstand') }}
          
          {{ basic.print('', 'strom.werte.leistung', 'Watt Leistung aktuell') }}
          Zitat von wvhn Beitrag anzeigen
          der ./lang/de.ini ist die Einheit "kwh" mit Komma hinterlegt. Du musst dies mit kleinem "w" angeben.
          heißt das ich soll im Item nicht "num" angeben sondern "kwh"? --> NEIN das klappt nicht !



          Wobei das "Komma" nicht das Problem ist - wichtiger wäre, dass nur zu festgelegten Zeiten ein Wert in die Datenbank geschrieben wird. Odar alternativ zu festen Zeiten ein Wert ausgelesen wird, damit eine sinnvolle Anzeige zustande kommen kann.
          Zuletzt geändert von Maexle; 22.12.2021, 17:16.

          Kommentar


            #6
            Schau mal in die Doku von basic.print. Der 3. Parameter „format“ ist für die Einheit da. Wenn Du da Deinen eigenen Text reinschreibst, dann klappt das mit der Einheit natürlich nicht. Eigenen Text kannst Du stattdessen direkt hinter das Widget in html schreiben.

            Kommentar


              #7



              Vielen Dank
              wvhn

              das kommt von dem ewigen STRG+C STRG+V und funktioniert hat es ja auch noch das die Einheit dabei steht....

              jetzt könnte ich mir das "round" in den Items sparen --> wobei das die "Liste" im Database WebIF etwas übersichtlicher macht...
              Zuletzt geändert von Maexle; 22.12.2021, 20:25.

              Kommentar


                #8
                Hi,

                Ich habe mich für einen Wert pro Tag entschieden. Umsetzung wie folgt:

                Code:
                # logic.yaml
                
                midnight:
                    filename: midnight.py
                    crontab: 0 0 * *
                Code:
                #/logics/midnight.py
                #!/usr/bin/env python
                
                sh.eta.kessel.energie.tag(sh.eta.kessel.energie.heute())
                sh.eta.kessel.energie.midnight(- sh.eta.kessel.energie.value())
                Code:
                # items/eta_pu.conf
                eta:
                    kessel:
                        energie:
                            name: Energie
                            eta_pu_uri: /40/10021/0/0/12153
                            value:
                                eta_pu_type: calc
                                database: init
                                type: num
                                eval: value / 60 / 60 * 15 # Umrechnung von Vollaststunden auf kWh
                            tag:
                                type: num
                                database: init
                            midnight:
                                type: num
                                cache: on
                            heute:
                                type: num
                                eval: sum
                                eval_trigger:
                                    - eta.kessel.energie.value
                                    - eta.kessel.energie.midnight
                PS: Gehört vermutlich nicht ins SmartVisu Forum?

                Gruß
                Sascha
                Zuletzt geändert von SaschaG; 22.12.2021, 22:32.

                Kommentar


                  #9
                  Zitat von wvhn Beitrag anzeigen
                  ./lang/de.ini

                  Doku von basic.print. Parameter „format“
                  Ich habe mir das Ganze jetzt am Rechner noch genauer angesehen. In "./lang/de.ini" habe ich "speedms = "%01,1f m/s" eingefügt.


                  In der Doku ist mir aufgefallen...
                  {{ basic.print(id, item, format, formula, threshold, color, href, rel) }}
                  {{ plot.gauge(id, item, min, max, unit, label, mode, stop, color) }}
                  das die Benennung nicht "durchgängig" ist.

                  Wäre ein Hinweis in der Doku bei den jeweiligen Parametern zur ./lang/de.ini möglich. Könnte mir vorstellen, dass ich nicht der Erste bin der darüber gestolpert ist.


                  Frohe Weihnachten
                  Zuletzt geändert von Maexle; 25.12.2021, 16:04.

                  Kommentar


                    #10
                    format
                    either a unit of the language file, an individual format string (PHP sprintf like) or a simple string as suffix.
                    Use 'text' to display result as unformatted string, 'html' to render it as unescaped html, 'text2br' to convert line endings like '\r', '\n' or '\r\n' to HTML breaks or 'script' to just execute as JavaScript w/o displaying anything.
                    Das ist die Beschreibung für den Parameter „format“ in basic.print. Was ist daran missverständlich? In Deinem Fall hast Du halt „simple string as suffix“ gewählt.
                    Plot.gauge akzeptiert nur unit. Auch das passt in der Abgrenzung zu „format“.

                    Kommentar


                      #11
                      Im Zusammenhang passt das natürlich schon. Wenn einem nicht bewusst ist, dass die Einheiten in der "ini" stehen dann wird es schwierig.

                      Aber lass uns jetzt da nicht drauf rumreiten.

                      Den Code von
                      SaschaG konnte ich noch ausprobieren.

                      Kommentar


                        #12
                        SaschaG

                        Ich habe deinen Code getestet:

                        Code:
                        eta:
                            kessel:
                                energie:
                                    name: Energie
                                    
                                    value:
                                        sml_obis: 1-0:1.8.0*255 # Summe Zählerstände Tarife T1 + T2 (in Wh)
                                        sml_prop: valueReal
                                        database: init
                                        type: num
                                        eval: round(value / 1000, 2)
                                    tag: # Differenz zwischen Vortag und Heute (zur eingestellten Uhrzeit)
                                        type: num
                                        database: init
                                    midnight:
                                        type: num
                                        cache: on
                                    heute:
                                        type: num
                                        eval: sum
                                        eval_trigger:
                                            - eta.kessel.energie.value
                                            - eta.kessel.energie.midnight
                        den Crontab hatte ich auf alle 15 Minuten. Hat Anfangs funtkioniert. Aber seit 11:00 kein Wert mehr. Meine Vermutung: der Stromzähler gibt seine Werte nicht ständig aus... wenn beides gleichzeitig / oder eben nicht gleichzeitig (Keine Ahnung) geschieht dann wird kein Wert in das Item übernommen... wie gesagt keine Ahnung ob das so ist oder nicht.



                        Ich habe jetzt mal den Crontab erhöht:

                        logics/edit/midnight|midnight.py

                        Parameter Wert
                        Cycle
                        Crontab(s) 0 */6 * *


                        ergibt in der etc/logic.yaml

                        Code:
                        midnight:
                            filename: midnight.py
                            crontab:
                            -   0 */6 * *
                        ergibt auf der Seite IP/admin/logics
                        Nächste Ausführung 2021-12-28 18:00:00+0100
                        also gehe ich davon aus, dass meine Eingabe der Crontab(s) richtig ist?!?

                        Danke


                        edit: eben ist mir aufgefallen, dass das Item bezug_gesamt: um kurz nach 11 das letzte mal aktualisiert wurde... evtl. liegt es daran, dass der Stromzähler von 2 Items abefragt wird?
                        Ich nehme mal dieses Item raus (alle Zeilen #)

                        Hat jemand eine Idee wie der Stromzähler simuliert (händisch) werden kann...zum Beispiel KNX-Tasterschnittstelle als Zähler - um eine unbekannte aus dem System zu bekommen.


                        Zitat von SaschaG Beitrag anzeigen
                        Gehört vermutlich nicht ins SmartVisu Forum?
                        wenn es jemandem möglich ist bitte nach SHNG verschieben - Danke
                        Zuletzt geändert von Maexle; 28.12.2021, 12:39.

                        Kommentar


                          #13
                          Hi,

                          Ich bin mir nicht sicher, ob du meinen Vorschlag missverstanden hast oder ob ich noch nicht verstehe was du machen willst?
                          1. Warum alle 15 bzw. 6 Minuten satt alle 24h? Für ein Diagramm ist das unnötig, da bei jeder Aktualisierung von "value" im Item "heute" auch ein neues Datum angelegt wird.
                          2. Der crontab in der logic.yaml aktualisiert ja nur die Werte für "midnight" und "tag" und hat erst mal nichts mit "bezug_gesamt" bzw. "value" zu tun. Das 2 Items auf den selben "Stromzähler" verweisen sollte kein Problem sein. Da muss ein anderes Problem vorliegen.
                          Auf dein Beispiel adaptiert hätte ich den Code folgendermaßen abgeändert:
                          Code:
                          # strom_werte.yaml
                          
                          strom:
                              werte:
                                  bezug_gesamt:
                                      type: num
                                      sml_obis: 1-0:1.8.0*255 # Summe Zählerstände Tarife T1 + T2 (in Wh)
                                      # eval: sh.strom.werte.bezug_gesamt() / 1000
                                      sml_prop: valueReal
                                      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
                                 
                                  tag:
                                      type: num
                                      database: init
                                  midnight:
                                      type: num
                                      cache: on
                                  heute:
                                      type: num
                                      eval: sum
                                  eval_trigger:
                                      - ..bezug_gesamt
                                      - ..midnight
                          Anpassung der midnight.py:
                          Code:
                          #/logics/midnight.py
                          #!/usr/bin/env python
                          sh.strom.werte.tag(sh.strom.werte.heute())
                          sh.strom.werte.midnight(- sh.strom.werte.bezug_gesamt())
                          Kurz zur Erläuterung was der Code machen soll:
                          • Im Item "value" steht ein kummulierter Wert der vortluafend steigt -> Vorraussetzung für den Code
                          • Im Item "midnight" merke ich mir den Wert um Mitternacht. Damit ist es mir möglich Tagesverbräuche zu berechnen.
                          • Das Item "heute" zeigt zu jeder zeit den aktuellen Tagesverbrauch von Mitternacht bis jetzt.
                          • Das Item "tag" speichert den Gesamtverbrauch jeden Tages
                          Ist das überhaupt das, was du machen willst? Ich hatte deinen Eingangspost so verstanden.

                          Gruß
                          Sascha

                          Kommentar


                            #14
                            SaschaG

                            zuerst Danke für den Code -- heute werde ich nicht dazu kommen dies zu testen.

                            zu 1.
                            ich hatte das so verstanden, dass die Logik zu festgelegten Uhrzeiten (bei dir 0:00) den aktuellen Wert speichert... aber da habe ich mich wohl geirrt. Wobei ich als Laie der Meinung bin, dass damit die Datenbank entlastet wird. Ich lege eigentlich keinen Wert drauf, dass jeder neue Wert vom (in diesem Beispiel: Stromzähler kann ja aber auch eine Raumtemperatur etc. sein) gespeichert wird. Deshalb hatte ich gedacht 4 Werte pro Tag (z.B. 0:00 6:00 12:00 18:00 --> dann wäre auch schön zusehen wann der meiste Verbrauch herrscht (wieder in diesem speziellen Fall)

                            * evtl. wäre ja ein database: crontab Uhrzeiten oder falls falsch herum crontab: (database(Uhrzeiten) möglich

                            Aber klar für einen Tagesverbrauch ist die Uhrzeit erst mal egal, es müssen halt 24h dazwischen liegen.
                            Wenn ich den Stromzähler mit der Taschenlampe anleuchte - gibt dieser auch 1d, 7d, 30d, letztes Jahr aus (über die Schnittstelle erhalte ich nicht so viele Werte (was mich aber auch irgendwie wundert....) Diese Zeitspannen werden aber seit Inbetriebnahme - sprich unabhängig von Datum/Uhrzeit gezählt (Beispiel Zähler wurde montiert 3.5.21 um 11:30 --> dann wechselt der 1d Wert jeweils um 11:30 (auch das ist egal, es geht ja nicht um eine präzise Tag genaue Abrechnung)

                            zu.1.1 Warum alle 15 bzw. 6 Minuten
                            hier wollte ich halt einen kürzeren Tag simulieren um zu sehen ob alles funktioniert. Weil eine Änderung am Tag 1 um19:00 machen dann warten bis Tag 3 8:00 um zu sehen das um jeweils um 0:00 ein Wert gespeichert wurde und ob dann richtig gerechnet wurde...ist etwas langwierig.




                            zu 2.1
                            diesen Teil verstehe ich nicht wirklich... wenn um 0:00 kein Wert in der Db steht wie kann dann etwas berechnet werden (wobei mir das egal ist wenn es funktioniert)

                            zu 2.2
                            bisher hatte ich auch kein Problem festgestellt, wenn z.B "ein Wert vom KNX" in mehreren Items verwendet wurde. War meine Vermutung, hier so viele Dinge (Datenbank, SML-Plugin, USB-RasPi, Stromzähler Sende/Empfang....) wenn hier ein Glied der Kette versagt (oder verzögert) kommt es zur Kettenreaktion.
                            Was mir aufgefallen ist, dass vom 27.12 bei mehreren Db-Einträgen keine Werte gespeichert wurden (Wind, Temperatur etc) evtl. war der RasPi einfach beleidigt von den Tausenden Änderungen am 26.12.



                            So das ist jetzt leider eine Menge Text geworden. Ich hoffe nicht noch mehr Unklarheiten erzeugt zu haben, ansonsten bitte melden. Dann versuche ich mich an einer Erklärung.

                            Danke

                            Kommentar


                              #15
                              Hi,

                              Wenn es hilft - gerne.

                              zu 1)
                              Zum Verständnis: "bezug_gesamt" hat ja das Subitem "database: init" demnach wird jeder geänderte Wert in die Datenbank geschrieben. Hat ja keinerlei Abhängigkeiten zu Crontab. Wie oft ein neuer Wert geschrieben wird hängt vom Plugin ab.
                              Ich glaube zwar nicht, dass die DB entlastet werden muss. Eher die SD eines RasPi. Das umzusetzen wäre nicht schwer: Hier ein Vorschlag:
                              Code:
                              strom:
                                  werte:
                                      bezug_gesamt:
                                          type: num
                                          sml_obis: 1-0:1.8.0*255
                                          sml_prop: valueReal
                                          eval: round(value / 1000, 2)
                                      bezug_gesamt_db:
                                          type: num
                                          database: init
                                          eval: sh...bezug_gesamt()
                                          crontab: * */6 * * = 1
                              Achtung: Der Vorschlag ist ungetestet und nicht direkt kompatibel zum vorher vorgeschlagenem Code.

                              Btw. Dein Crontab
                              Zitat von Maexle Beitrag anzeigen
                              Crontab(s) 0 */6 * *
                              triggert nur alle 6 Stunden (nicht Minuten), wenn ich die Doku richtig verstehe.

                              zu 1.1) Verstanden. Macht Sinn. Wichtig ist nur das in "bezug_gesamt" dann hinreichend oft ein geänderter Wert geschrieben wird.
                              zu 2.1) Hier wird der letzte Wert des jeweiligen Items geschrieben. Hat nix mit der Datenbank zu tun. Ausser dass das Item "tag" ebenfalls in die DB geschrieben wird.
                              zu 2.2) Kenn ich. Macht es aber schwer nachzuvollziehen warum etwas nicht geht 😉

                              Gruß
                              Sascha

                              Kommentar

                              Lädt...
                              X