Ankündigung

Einklappen
Keine Ankündigung bisher.

Support Thread - "DatabaseAddOn" Plugin

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

    #91
    Zitat von Sisamiwe Beitrag anzeigen
    Auch wenn der Wert sich nicht ändert, wird dann der immer gleiche Wert des Zahlerstandes gesendet und ins Item geschrieben?
    Nimm mal das enforce_updates aus paradigma.Betriebsstunden raus. Dann sollte der Eintrag nicht mehr kommen.

    PS: enforce_updates bewirkt, dass auch bei Zuweisung des gleichen Wertes alle Aktivitäten (Eintrag in DB usw. geschehen)
    Danke. Probiere ich später mal aus.
    Was macht das DB Addon denn, wenn der notwendige Wert nicht verfügbar ist?
    Ich habe vor 2-3 Monaten meine Datenbank verloren, weshalb ich Werte erst wieder ab März/April habe.
    D.h., 'verbrauch_jahr' kann nicht auf den Wert im Januar zurückgreifen. Ich dachte, das addon zieht dann den niedrigst verfügbaren Wert ab. Also 'heute - kleinsten Wert'. Richtig?
    Bei mir liefert der Befehl aber den aktuellen Absolut-Stand ...
    Passt das?

    Kommentar


      #92
      Zitat von Sisamiwe Beitrag anzeigen
      Wie meinst Du "Verbrauch aufsummieren?
      Erklär mal.
      Meine PV Batterie liefert über jsonread nur den aktuellen Verbrauch oder Ertrag in W. (oben z.B. 'Consumption_W'), liefert mir aber nicht direkt den Tages-, Wochen- oder Monatsverbrauch.
      Das würde ich gerne ausrechnen bzw. mache das schon 'händisch' (siehe Item oben)

      1. Ich integriere über eine Stunde die Werte auf, damit ich Energie in kWh bekomme.

      2. Ich summiere den Wert stündlich auf, so dass ich den Verbrauch bzw. Ertrag seit Mitternacht bekomme ('Day_since') bzw. die Summe des gesamten gestrigen Tages ('Day').

      3. Das gleiche mache ich dann für Woche, Monat, Jahr, ...

      verständlich?

      Kommentar


        #93
        Zitat von ooUrmeloo Beitrag anzeigen
        D.h., 'verbrauch_jahr' kann nicht auf den Wert im Januar zurückgreifen. Ich dachte, das addon zieht dann den niedrigst verfügbaren Wert ab. Also 'heute - kleinsten Wert'. Richtig?
        Das SOLL-Verhalten kann man über Plugin-Parameter "use_oldest_entry" einstellen. True bewirkt, dass der älteste Eintrag genommen wird, wenn der Wert zum Startzeitpunkt nicht verfügbar ist. Bei False wird der Wert auf 0 gesetzt, da die Berechnung ja "falsch" ist. der Default-Wert ist False.

        Wie ist es bei dir konfiguriert? Es kann gut sein, dass da noch ein Fehler drin ist.

        Kommentar


          #94
          Zitat von Sisamiwe Beitrag anzeigen
          Das SOLL-Verhalten kann man über Plugin-Parameter "use_oldest_entry" einstellen. True bewirkt, dass der älteste Eintrag genommen wird, wenn der Wert zum Startzeitpunkt nicht verfügbar ist. Bei False wird der Wert auf 0 gesetzt, da die Berechnung ja "falsch" ist. der Default-Wert ist False.

          Wie ist es bei dir konfiguriert? Es kann gut sein, dass da noch ein Fehler drin ist.
          Ich habe gerade extra nochmal geschaut. Ich habe "use_oldest_entry" auf 'true' aber bei 'verbrauch_jahr' trotzdem den aktuellen Wert (= aktuell - 0).
          M.E. nimmt er nicht den ältest verfügbaren Wert.

          Kommentar


            #95
            Zitat von ooUrmeloo Beitrag anzeigen
            Ich habe gerade extra nochmal geschaut. Ich habe "use_oldest_entry" auf 'true' aber bei 'verbrauch_jahr' trotzdem den aktuellen Wert (= aktuell - 0).
            M.E. nimmt er nicht den ältest verfügbaren Wert.
            Kann es sein, dass deine neue Datenbank mit dem Wert "0" initialisiert wurde und damit "0" der älteste Wert ist.
            Du kannst das auf 2 Weisen testen: Entweder im WebIF des Database-Plugin schauen und den ältesten Wert suchen, oder in der Konfiguration des DB-Addon Plugins bzw. in der Itemkonfiguration sagen, dass die Werte "0" ausgeblendet werden sollen.
            Schau das bitte mal nach.

            Kommentar


              #96
              Zitat von Sisamiwe Beitrag anzeigen
              Kann es sein, dass deine neue Datenbank mit dem Wert "0" initialisiert wurde und damit "0" der älteste Wert ist.
              Du kannst das auf 2 Weisen testen: Entweder im WebIF des Database-Plugin schauen und den ältesten Wert suchen, oder in der Konfiguration des DB-Addon Plugins bzw. in der Itemkonfiguration sagen, dass die Werte "0" ausgeblendet werden sollen.
              Schau das bitte mal nach.
              In der Datenbank für z.B. Betriebstunden steht keine '0'. Der älteste Wert (vom 4.4.) ist 6751 und der aktuelle ist 6783. Wie gesagt, davor die Daten habe ich leider verloren.
              Kann man in der Datenbank eigentlich irgendwie manuell Daten ergänzen? Also z.B. einen Wert für 01.01.24 eintragen? Habe keine (einfache) Möglichkeit dazu gefunden.

              Kommentar


                #97
                Zitat von ooUrmeloo Beitrag anzeigen
                Kann man in der Datenbank eigentlich irgendwie manuell Daten ergänzen? Also z.B. einen Wert für 01.01.24 eintragen? Habe keine (einfache) Möglichkeit dazu gefunden.
                Nutzt du mysql bzw. MariaDB oder sqlite3?

                Zitat von ooUrmeloo Beitrag anzeigen
                In der Datenbank für z.B. Betriebstunden steht keine '0'. Der älteste Wert (vom 4.4.) ist 6751 und der aktuelle ist 6783.
                Schau bitte mal im WebIF des DBADDON. Dort gibt es einen Reiter "Maintenance". Dort ist zu sehen, welchen Wert das Plugin als ältesten ermittelt hat.

                Ich schaue mir das die Tage nochmal an.

                Kommentar


                  #98
                  Zitat von Sisamiwe Beitrag anzeigen
                  Nutzt du mysql bzw. MariaDB oder sqlite3?
                  Ich benutze sqlite3

                  Zitat von Sisamiwe Beitrag anzeigen
                  Schau bitte mal im WebIF des DBADDON. Dort gibt es einen Reiter "Maintenance". Dort ist zu sehen, welchen Wert das Plugin als ältesten ermittelt hat.
                  Der Maintenance Reiter ist bei mir leer ... :-/ Die anderen gehen ...

                  grafik.png

                  Kommentar


                    #99
                    Zitat von ooUrmeloo Beitrag anzeigen
                    Ich benutze sqlite3
                    Du könntest wie folgt vorgehen:
                    • smarthomeNG beenden (dass nicht in die DB geschrieben wird)
                    • die DB mit einem Tool zB DB Browser öffnen
                    • mit dem Tool eigene Einträge machen, dazu müsstest den timestamp berechnen (unix-time in microsekunde)
                    • DB Bearbeitung beenden
                    • smarthomeNG starten
                    Du kannst die fehlenden Werte auch ein Excel als csv vorbereiten und das csv mit dem Tool importieren.

                    Zitat von ooUrmeloo Beitrag anzeigen
                    Der Maintenance Reiter ist bei mir leer ... :-/ Die anderen gehen ...
                    Das liegt daran, dass der Reiter nur bei eingestellten LogLevel <20 gefüllt wird.
                    Stell mal den LogLevel auf Debug (geht ja "on-runtime") und dann sollte dort was stehen.
                    Zuletzt geändert von Sisamiwe; 13.06.2024, 20:18. Grund: Korrektur

                    Kommentar


                      Sisamiwe: danke für die Tipps. Ich bin gerade viel unterwegs und kann das wahrscheinlich erst nächstes Wochende ausprobieren. :-(

                      Kommentar


                        Sisamiwe

                        Zitat von Sisamiwe Beitrag anzeigen
                        Kannst Du bitte noch folgende Infos liefern:
                        • Plugin Version
                        • Item Definition
                        Danke dir
                        Sorry für das späte Feedback - das war bei mir untergegangen:

                        Plugin-Version ist die 1.2.7
                        Und hier ist das Item:


                        Code:
                        ...
                        ac_energy_total:
                                type: num
                                visu_acl: ro
                                smamb_register@wrpv: 30529
                                smamb_datatype: U32
                                database: true
                                eval: round(float( value / 1000.0 ) , 2)
                                database: init
                              
                                db_addon_ignore_value: 0
                              
                                struct:
                                  - db_addon.verbrauch_1
                        
                        -----
                        In der Visu eingebunden dann über
                        
                        {{ basic.print('ErzeugToday', '  Haus.Zentral.Wechselrichter.ac_energy_total.verbrauch_tag', '%01,1f kWh' ) }}​
                        Danke und schönen Sonntag
                        Gunnar

                        Kommentar


                          So, ich kam heute auch mal dazu, zu testen ...

                          Zitat von Sisamiwe Beitrag anzeigen
                          Das liegt daran, dass der Reiter nur bei eingestellten LogLevel <20 gefüllt wird.
                          Stell mal den LogLevel auf Debug (geht ja "on-runtime") und dann sollte dort was stehen.
                          Unter dem Maintenance Reiter kommen folgende Einträge, die erstmal plausibel aussehen. Das sind wirklich die ältesten Einträge, ungleich '0'. Warum er also immer den Gesamt-Zählerstand für 'Jahr_bisher' nimmt, weiß ich nicht. Evtl. stimmt da noch was nicht mit der "oldest_log" Abfrage?!
                          Die Zeitpunkte passen auch, nachdem meine DB abgeschmiert war. Beides Anfang April.

                          Code:
                          Item: paradigma.Brenner_Starts: {'id': 51, 'oldest_log': 1712376255378}, Item: paradigma.Betriebsstunden: {'id': 50, 'oldest_log': 1712257958735}
                          ****************


                          Zitat von Sisamiwe Beitrag anzeigen
                          Du könntest wie folgt vorgehen:
                          • smarthomeNG beenden (dass nicht in die DB geschrieben wird)
                          • die DB mit einem Tool zB DB Browser öffnen
                          • mit dem Tool eigene Einträge machen, dazu müsstest den timestamp berechnen (unix-time in microsekunde)
                          • DB Bearbeitung beenden
                          • smarthomeNG starten
                          Das habe ich genau so ausprobiert, und einen manuellen Datenpunkt für 31.12.23 erzeugt. Hat wunderbar geklappt. Jetzt rechnet das Addon sofort den richtigen Wert aus.

                          Danke für die Hilfe!

                          Kommentar


                            Moin,

                            aufgrund von geplanten Änderungen am SmartPlugin überlegen wir, die suspend-Funktionalität anzupassen. Die Änderungen würden sich insoweit auswirken, dass das Plugin nicht "stummgeschaltet" wird (wie jetzt in suspend), sondern angehalten (über stop()) und entweder von Hand oder per Item mit run() wieder gestartet wird.

                            Das setzt voraus, dass das Plugin "restartable" ist, also bei stop() alles Notwendige aufräumt und bei run() alles Notwendige wieder startet, ohne dass init(), parse_item() o.ä. notwendig wäre.
                            Das heißt insbesondere, dass bei zusätzlichen Threads diese in run() neu erstellt werden müssen (und nicht gestartet), da Threads aufgrund eines Fehlers (?) in Python nicht neugestartet werden können.

                            Dazu wäre die Frage: gibt es Funktionen, die das Plugin bei suspend() ausführen (können) soll? Oder würde stop/run für euch den gleichen Zweck erfüllen?

                            Wenn wir das umsetzen, kann ich bei den ggf. notwendigen Änderungen gern unterstützen.

                            Gruß
                            Sebastian

                            Kommentar


                              Morg

                              Zitat von Morg Beitrag anzeigen
                              Das setzt voraus, dass das Plugin "restartable" ist, also bei stop() alles Notwendige aufräumt und bei run() alles Notwendige wieder startet, ohne dass init(), parse_item() o.ä. notwendig wäre.
                              Das sollte jetzt bereits gehen

                              Zitat von Morg Beitrag anzeigen
                              Das heißt insbesondere, dass bei zusätzlichen Threads diese in run() neu erstellt werden müssen (und nicht gestartet), da Threads aufgrund eines Fehlers (?) in Python nicht neugestartet werden können.
                              Es werden keine zusätzlichen Threads neu gestartet. (Das war mal, habe ich aber wieder entfernt)

                              Zitat von Morg Beitrag anzeigen
                              Dazu wäre die Frage: gibt es Funktionen, die das Plugin bei suspend() ausführen (können) soll? Oder würde stop/run für euch den gleichen Zweck erfüllen?
                              Ich habe nochmal im Code nachgeschaut und ja, Stop/Start würde das gleich machen wie suspend.

                              Kurzum, können wir gern bei dem Plugin so machen.

                              Beste Grüße

                              Kommentar


                                Zitat von ooUrmeloo Beitrag anzeigen
                                Warum er also immer den Gesamt-Zählerstand für 'Jahr_bisher' nimmt, weiß ich nicht. Evtl. stimmt da noch was nicht mit der "oldest_log"
                                Ich habe den Bug gefunden und den PR aktualisiert.
                                Kannst Du bitte nochmal testen?

                                Kommentar

                                Lädt...
                                X