Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbrauch je Minute / Stunde / Tag

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

    #16
    Zitat von Bonze Beitrag anzeigen
    post#3 erklärt es doch schon ganz gut
    Danke
    Dann werde ich mal versuchen das auf sml_obis: und sml_prop: umzuschreiben male sehen ob das klappt.


    Zitat von Onkelandy Beitrag anzeigen
    Das hier könnte helfen:
    Danke, den Beitrag kenne ich... die > 500 Zeilen Code verstehe ich aber überhaupt nicht.



    Kommentar


      #17
      Screenshot 2021-12-29 at 17-54-14 Schulstraße 27.png
      du musst dir vorstellen, das wenn du 4 mal am tag was in die Db schreibst, es dir nix bringt

      bei mir sieht das so aus zB. ich schreibe alle 10s glaube ich in die datenbank
      Die hab in Erinnerung, das die Datenbank sich selbst optimiert, doppelte folgende Einträge werden nicht gespeichert etc..

      Kommentar


        #18
        Zitat von Maexle Beitrag anzeigen
        Danke
        Dann werde ich mal versuchen das auf sml_obis: und sml_prop: umzuschreiben male sehen ob das klappt.



        Danke, den Beitrag kenne ich... die > 500 Zeilen Code verstehe ich aber überhaupt nicht.


        musst auch nicht zwingend verstehen. du könntest die yaml als struct ins etc Verzeichnis speichern und dann mittels struct: wertehistorie oder was auch immer integrieren. Der Rest läuft quasi automatisch. Aber klar, wenn dir die gebotenen Funktionen nicht reichen, müsstest du selbst Hand anlegen.

        Kommentar


          #19
          Zitat von Bonze Beitrag anzeigen
          also
          dann ist sowas
          werde ich versuchen...


          Zitat von Bonze Beitrag anzeigen
          1. 4 mal am tag was in die Db
          2. bei mir sieht das so aus zB. ich schreibe alle 10s glaube ich in die datenbank
          1. irgendwie habe ich das Gefühl wir Schreiben aneinander vorbei (soll nicht heißen das es an Dir liegt)
          2. du zeigst hier eine Leistung an - da ist "echtzeit" natürlich interessant.

          zu. 1:
          Möchte ich ein Beispiel anfügen.
          Der RasPi ist ein 1-€uro-Jober der zu den (von mir) festgelegten Zeiten in den Keller marschiert, auf den Zähler kuckt und den abgelesenen Wert in eine Tabelle einträgt.
          Da der Wert natürlich immer ansteigt kann der Verbrauch pro Zeitspanne errechnet werden.

          Warum das zu festegelegten Zeiten keinen Sinn macht verstehe ich wirklich nicht...



          Zitat von Onkelandy Beitrag anzeigen
          die gebotenen Funktionen nicht reichen
          eher das Gegenteil - deutlich zu viel Funktionen

          Zitat von Onkelandy Beitrag anzeigen
          mittels struct: wertehistorie
          dazu habe ich hier gelesen... https://www.smarthomeng.de/itemvorlagen-nutzen-structs ... https://www.smarthomeng.de/dev/user/...m_structs.html ... leider verstehe ich nur Bahnhof.
          Zuletzt geändert von Maexle; 30.12.2021, 10:24.

          Kommentar


            #20
            Ja genau, wollte damit nur sagen schreib die daten "echtzeit" in die db und mach die gewünschten anzeigen mit der auswertung, daten die man hat kann man auswerten , welche die nicht gespeichert werden, kann man auch ned auswerten

            Bei obigem beispiel könnte ich auch einfach sagen , zeig mir die daten der letzten stunde, der letzten 4wochen usw.
            Ich könnte aber auch sagen gib dir die daten zw 0 und 4 uhr , oder gib mir den wert um genau 2.35uhr...
            Bei nem zählerstand macht das anzeigen einer Zeitspanne keinen sinn da er ja eh nur linear ansteigt..
            Ich glaube du könntest in unseren gitter chat kommen , vl kann man dir da besser helfen .


            bei mir siehts z.B: so aus ich schreibe die daten komplett und mache mir dann jeweils eine auswertung...
            Code:
             strom:
                    zaehlertotal:
                        name: Zaehlerstand
                        type: num
                        visu: yes
                        visu_acl: rw
                        database: true
                        sml_obis: 1-0:1.8.0*255
                    verbrauch:
                        name: Stromverbrauch
            
                        # in kwh
                        gesamt:
                            type: num
                            visu: yes
                            visu_acl: rw
                            database: true
                            eval: round(float(sh.kg.strom.zaehlertotal()) / 1000.0, 2)
                            eval_trigger: kg.strom.zaehlertotal
                            
            
                        # in kwh
                        heute:
                            type: num
                            visu: yes
                            visu_acl: rw
                            database: true
                            eval: round(float(sh.kg.strom.verbrauch.gesamt()) - sh.kg.strom.verbrauch.gesamt.db('max', sh.date.minute.since.midnight.dbstr(), sh.date.minute.since.midnight.dbstr()))
                            eval_trigger: kg.strom.zaehlertotal
            
                        # in kwh
                        gestern:
                            name: Stromverbrauch_gestern
                            type: num
                            visu: yes
                            visu_acl: rw
                            database: true
                            eval: round(float(sh.kg.strom.verbrauch.gesamt.db('max', '1d','1d')) - sh.kg.strom.verbrauch.gesamt.db('max', '2d','2d'))
                            eval_trigger: kg.strom.zaehlertotal
            
                        woche:
                            name: Stromverbrauch_letzteWoche
                            type: num
                            visu: yes
                            visu_acl: rw
                            database: true
                            eval: round(float(sh.kg.strom.verbrauch.gesamt()) - sh.kg.strom.verbrauch.gesamt.db('max', sh.date.day.since.week.dbstr(), sh.date.day.since.week.dbstr()))
                            eval_trigger: kg.strom.zaehlertotal
            Zuletzt geändert von Bonze; 30.12.2021, 12:00.

            Kommentar


              #21
              Ein GUTES NEUES an ALLE

              Zitat von Bonze Beitrag anzeigen
              daten die man hat kann man auswerten
              da gebe ich Dir absolut recht.

              Deinen Code hab ich mal eingespielt --> die Auswertungen funktionieren nicht. Muss ich mir morgen am Rechner mal ansehen. Ich denke aber nicht das es daran liegt, dass ich das fehlende "kg" durch "test" und z.B hier ebenfalls erstetzt habe. eval_trigger: (kg)test.strom.zaehlertotal...

              der Zählerstand wird fleißig gelesen, aber es werden keine Berechnungen ausgeführt.

              O.T.

              name: Zaehlerstand # wird der Name irgendwo genutzt oder ist das nur etwas ähnliches einem Kommentar?
              visu: yes # - ist das notwendig - habe ich (wenn ich mich recht erinnere) in keinem ITEM verwendet
              visu_acl: rw # - die Visu darf den Wert aktualisieren "read" und "write" richtig?

              O.T.


              Ich halte euch auf dem Laufenden.

              Zuletzt geändert von Maexle; 02.01.2022, 15:58.

              Kommentar


                #22
                Naja kg.strom.zaehlertotal is mein item, welches fortlaufend den zaehlerstand erhält..
                Du müsstest mal über das admin interface guckn, ob du auch wirklich ein item date.sibce.. hast
                Poste hier am besten mal deine items des zaehlers..


                Kommentar


                  #23
                  Zitat von Bonze Beitrag anzeigen
                  item date.sibce
                  das habe ich sicher nicht.

                  dann haben wir die Ursache wahrscheinlich schon gefunden...

                  Zitat von Bonze Beitrag anzeigen
                  Code:
                  sh.date.day.since.week.dbstr
                  ich bin davon ausgegangen, dass dies "Standard-Item" sind... die über die Systemzeit errechnet werden.
                  Bzw. festgelegte Worte... date, day, week...



                  Zitat von Bonze Beitrag anzeigen
                  Poste hier am besten
                  ich habe gerade keinen Zugriff aufs System

                  Zitat von Bonze Beitrag anzeigen
                  items des zaehlers
                  welche meinst Du genau?
                  Ich logge seit Anfang Dez. den Zählerstand sowie die aktuelle Leistung

                  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
                  Zuletzt geändert von bmx; 02.10.2022, 15:40. Grund: Zitat repariert

                  Kommentar


                    #24
                    Genau diese sind systemitems, nur nutze ich eine nicht ganz aktuelle version, und falls du die neuste version nutzt, dann heissen die bei dir glaube ich env.date...

                    Kommentar


                      #25
                      Zitat von Bonze Beitrag anzeigen
                      systemitems, env.date...
                      ja "env...." gibt es auf jeden Fall --> werde ich morgen mal darauf umschreiben.

                      Schon mal Vielen Dank

                      Kommentar


                        #26
                        Update:

                        ich habe eine Logik aus dem Blog/Doku eingeladen --> daraufhin haben die "Gester" und "Heute" Items einen Wert erhalten. Mal sehen ob sich diese Morgen/Übermorgen verändern.

                        Kommentar


                          #27
                          Zitat von Bonze Beitrag anzeigen
                          sh.date.day.since.week.dbstr
                          Zitat von Maexle Beitrag anzeigen

                          ja "env...." gibt es auf jeden Fall --> werde ich morgen mal darauf umschreiben.

                          Schon mal Vielen Dank
                          Hi,

                          Hab danach gesucht. Bin mir ziemlich sicher, dass es das so als Systembestandteil nie gab. Da gab es doch mal diese Logic hier im Forum, welche diese Zeit-Items befüllt hat.
                          Systemseitig bietet sich hier shtime() an. Beispiel:
                          Code:
                          # in kwh
                          heute:
                              type: num
                              database: true
                              eval: round(float(sh.kg.strom.verbrauch.gesamt()) - sh.kg.strom.verbrauch.gesamt.db('max', '1d', str(shtime.time_since(shtime.today(), 'im')) + 'i'))
                              eval_trigger: kg.strom.zaehlertotal
                          Gruß
                          Sascha
                          Zuletzt geändert von SaschaG; 03.01.2022, 23:50.

                          Kommentar


                            #28
                            Hallo SaschaG

                            ich habe diesen Code https://www.smarthomeng.de/zeitdaten...ogik-berechnen verwendet.

                            das werde ich jetzt mal ein, zwei Wochen laufen lassen und beobachten...

                            Deinen Code von gestern habe ich mal als "heuteneutest" mit reingenommen.

                            Code:
                            # in kwh
                                        heutetest:
                                            type: num
                                        ##    visu: yes
                                        ##    visu_acl: rw
                                        ##    database: true
                                            database: init
                                            eval: round(float(sh.stromtest.verbrauchtest.gesamttest()) - sh.stromtest.verbrauchtest.gesamttest.db('max', sh.date.minute.since.midnight.dbstr(), sh.date.minute.since.midnight.dbstr()))
                                            eval_trigger: stromtest.zaehlertotaltest
                                            
                                            
                                         # in kwh
                                        heuteneutest:
                                            type: num
                                            database: true
                                            eval: round(float(sh.stromtest.verbrauchtest.gesamttest()) - sh.stromtest.verbrauchtest.gesamttest.db('max', '1d', str(shtime.time_since(shtime.today(), 'im')) + 'i'))
                                            eval_trigger: kg.stromtest.zaehlertotaltest

                            Danke Dir

                            Kommentar


                              #29
                              Hier mal noch der aktuelle Stand:

                              31.png

                              41.png


                              w31.png

                              w41.png


                              Code:
                              # test_sz_forum.yaml
                              
                              # https://knx-user-forum.de/forum/supportforen/smarthome-py/1000056-verbrauch-je-minute-stunde-tag?p=1723792#post1723792
                              
                              stromtest:
                                      zaehlertotaltest:
                                          name: Zaehlerstandtest
                                          type: num
                                        ##  visu: yes
                                        ##  visu_acl: rw
                                        ##  database: true
                                          database: init
                                          sml_obis: 1-0:1.8.0*255
                                      verbrauchtest:
                                          name: Stromverbrauchtest
                              
                                          # in kwh
                                          gesamttest:
                                              type: num
                                          ##    visu: yes
                                         ##     visu_acl: rw  ## test ob sich die Datei speichern laesst
                                         ##     database: true
                                              database: init
                                              eval: round(float(sh.stromtest.zaehlertotaltest()) / 1000, 2)
                                              eval_trigger: stromtest.zaehlertotaltest
                                              
                              
                                          # in kwh
                                          heutetest:
                                              type: num
                                          ##    visu: yes
                                          ##    visu_acl: rw
                                          ##    database: true
                                              database: init
                                              eval: round(float(sh.stromtest.verbrauchtest.gesamttest()) - sh.stromtest.verbrauchtest.gesamttest.db('max', sh.date.minute.since.midnight.dbstr(), sh.date.minute.since.midnight.dbstr()))
                                              eval_trigger: stromtest.zaehlertotaltest
                                              
                                              
                                           # in kwh
                                          heuteneutest:
                                              type: num
                                              database: true
                                              eval: round(float(sh.stromtest.verbrauchtest.gesamttest()) - sh.stromtest.verbrauchtest.gesamttest.db('max', '1d', str(shtime.time_since(shtime.today(), 'im')) + 'i'))
                                              eval_trigger: kg.stromtest.zaehlertotaltest   
                                              
                                              
                                              
                              
                                          # in kwh
                                          gesterntest:
                                              name: Stromverbrauch_gesterntest
                                              type: num
                                          ##    visu: yes
                                          ##    visu_acl: rw
                                          ##    database: true
                                              database: init
                                              eval: round(float(sh.stromtest.verbrauchtest.gesamttest.db('max', '1d','1d')) - sh.stromtest.verbrauchtest.gesamttest.db('max', '2d','2d'))
                                              eval_trigger: kg.strom.zaehlertotal
                              
                                          wochetest:
                                              name: Stromverbrauch_letzteWoche
                                              type: num
                                          ##    visu: yes
                                          ##    visu_acl: rw
                                          ##    database: true
                                              database: init
                                              eval: round(float(sh.stromtest.verbrauchtest.gesamttest()) - sh.stromtest.verbrauchtest.gesamttest.db('max', sh.date.day.since.week.dbstr(), sh.date.day.since.week.dbstr()))
                                              eval_trigger: stromtest.zaehlertotaltest
                              eval: round(float(sh.stromtest.verbrauchtest.gesamttest( )) - sh.stromtest.verbrauchtest.gesamttest.db('max', '1d', str(shtime.time_since(shtime.today(), 'im')) + 'i'))

                              Ich versuche mal diese Zeile zu verstehen...

                              Runden ?Fließkommazahl? "Aktueller Wert des Item" - "vorheriger Wert des selben Items aus der Datenbank(?max = möglichst alt? aber maximal 24 Stunden alt"
                              ??? passt da so in etwa?

                              aber ab str... ist nur noch Bahnhof
                              Zuletzt geändert von Maexle; 04.01.2022, 16:06.

                              Kommentar


                                #30
                                Hi,
                                Code:
                                round(...)
                                -> Runden der Fließkommazahl
                                Code:
                                float(sh.stromtest.verbrauchtest.gesamttest())
                                -> Aktueller Wert des Item als float. Update: Float ist hier vermutlich nur notwendig, wenn der Eingangswert nicht als float vorliegt. Ansonsten schadet es aber auch nicht. Wenn man dies als Blaupause nutzen möchte läßt man's einfach drin.
                                Code:
                                sh.stromtest.verbrauchtest.gesamttest.db('max', '1d', str(...) + 'i')
                                -> vorheriger Wert des selben Items aus der Datenbank.
                                -> max = größter Wert
                                -> in der Zeit zwischen: den letzten 24h und Mitternacht. Beide Werte werden als String erwartet.
                                -> Das 'i' steht für Minuten (siehe Doku).

                                Wobei die Minuten seit Mitternacht folgendermaßen berechnet werden:
                                Code:
                                shtime.time_since(shtime.today(), 'im')
                                -> shtime.time_since -> Zeit seit einem bestimmten Zeitpunkt
                                -> shtime.today() -> Der Zeitpunkt ist der heutige Tag un da keine Uhrzeit angegeben wird, wird 0:00 Uhr angenommen.
                                -> 'im' -> gebe die Zeispanne in Minuten als Integer zurück.

                                Siehe dazu auch Link


                                Viel Erfolg
                                Sascha
                                Zuletzt geändert von SaschaG; 06.01.2022, 11:01. Grund: Einschätzung zum float Statement geändert

                                Kommentar

                                Lädt...
                                X