Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: DatabaseAddOn - Erweitere Testphase

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

  • Sisamiwe
    antwortet
    Zitat von Foxi352 Beitrag anzeigen
    Ich nahm an, er würde sofort anfangen das Jahr hochzurechnen. Aber mir scheint er wird damit wohl erst ab 1. Januar nächsten Jahres anfangen ?
    Hier solltes so sein, dass das Plugin feststellt, dass es für den 1.1. keine Daten gibt, automatisch auf "oldest entry" geht und dieses Wert nimmt.
    Das Plugin hat noch einen Debug-Modus. Wenn Du im Log-level "debug" bist, gibt es automatisch im WebIF des Plugins einen Reiter "Maintenance". Dort sind alle gecachten Werte sichtbar. Schau mal, on dort der "oldest entry" für das Item sichtbar ist.

    Zitat von Foxi352 Beitrag anzeigen
    Die berechneten Werte werden nicht in die Datenbank geschrieben ? Ich hab zwar die Werte Heute und dann Gestern bis Gestern -2. Aber ich kann mir nicht z.B. eine Graphik anzeigen lassen mit den Tagesverbrauchen der letzten 7 Tage oder 30 Tage z.B. (Balkengraphik mit 1 Balken pro Tag). Oder steht ich auf dem Schlauch ?
    Du kannst die Werte in wieder in die DB schreiben. Dafür musst Du die struct entweder in der Plugin.yaml oder der Item.yaml im das Datenbank-Attribut erweitern.
    Aber: Ich habe auch eine Funktion des Plugins "db_request" implementiert, bei der kann man eine Wertereihe abfragen. Damit kann man für einen Zeitraum eine bestimmte Funktion abfragen.
    Auszug aus der Plugin.yaml.
    # mit dieser Funktion ist es möglich, eine Liste der "func" Werte pro "group" / "group2" eines "item" von "start""timespan" bis "end""timespan" oder von "start""timespan" bis "count" ausgegeben zu lassen
    # bspw: minimale Tagestemperatur vom Item "outdoor.temp" der letzten 10 Tage startend von gestern davor --> func=min, item=outdoor.temp, timespan=day, start=1, count=10, group=day
    # bspw: maximal Tagestemperatur vom Item "outdoor.temp" von jetzt bis 2 Monate davor --> func=max, item=outdoor.temp, timespan=month, start=0, end=2, group=day

    Hier muss ich aber nochmal ran. Im Moment klappt das zumindest bei mir nicht zuverlässig.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Danke!

    Einen Kommentar schreiben:


  • android
    antwortet
    Zitat von Sisamiwe Beitrag anzeigen
    Ich bin mir nicht mal sicher, dass es für die DB-Abfragen ein sqlite-äquivalent gibt.
    Ich habe mich mal ein bisschen eingelesen. Es gibt auf jeden Fall sqlite-äquivalent. Problem sind die Datum und Zeit Funktionen die unter sqlite andere sein müssen.

    https://www.sqlite.org/lang_datefunc.html vs. https://www.w3resource.com/mysql/dat...y-function.php

    Wenn ich Zeit habe, werde ich mich mal dran versuchen, das kann aber dauern....

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Ich habe einen Wasserzähler (m3). Da funktioniert das Plugin leider nicht. In der Datenbank hat es folgende Einträge:

    29.6.22 01:17 Wert=1274.0
    03.7.22 01:17 Wert=1275.0
    06.7.22 01:16 Wert=1276.0

    Das Item ist wie folgt definiert:

    Code:
    Wasser:
    
        Bezug:
    
            TotalOrig:
                type: num
                value: 0
                visu_acl: ro
                database: init
                
                auswertung:
                    type: foo
        
                    verbrauch_heute:
                        type: num
                        database_addon_fct: verbrauch_heute
        
                    verbrauch_monat:
                        type: num
                        database_addon_fct: verbrauch_monat
    
                    verbrauch_jahr:
                        type: num
                        database_addon_fct: verbrauch_jahr
    Die 3 Werte bleiben immer auf Null.

    Plugin.jpg

    Angehängt das Log mit DEBUG-Level. Errors sehe ich keine.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Ich habe das Plugin für meinen PV-Wechselrichter aktiviert. Der Total-kWh-Zähler zählt da einfach nach oben. Die Werte "Tag", "Monat" und "Jahr" werden nun berechnet.

    Code:
    solar:
    
        # Leistung aktuell [W]
        current:
            type: num
            kostal: actot_w
            visu_acl: ro
            database: init
    
        # Leistung gesamt [kWh]
        total:
            type: num
            kostal: yield_tot_kwh
            visu_acl: ro
            database: init
    
            auswertung:
                type: foo
    
                verbrauch_heute:
                    type: num
                    database_addon_fct: verbrauch_heute
    
                verbrauch_monat:
                    type: num
                    database_addon_fct: verbrauch_monat
    
                verbrauch_jahr:
                    type: num
                    database_addon_fct: verbrauch_jahr
    Im "smarthome-details.log" finde ich aber diese Fehlermeldung:

    Code:
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   update_item was called with item solar.total with value 77245 from caller Logic, source None and dest None
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _fill_cache_dicts called with updated_item=solar.total and value=77245.
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _fill_cache_dicts: verbrauch item solar.total detected. Check for update of _cache_dicts and item value.
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _query_item called with func=max, item=solar.total, timespan=heute, start=1, end=0, group=None, ignore_value=None
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _get_oldest_log: called for item=solar.total
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _get_oldest_log for item solar.total = 1325372400876
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _query_item: oldest_log=1325372400, ts_start=1656885600, ts_end=1656972000
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _query_log: Called with func=max, item=solar.total, timespan=day, start=1, end=0, count=None, group=None, group2=None, ignore_value=None
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _get_itemid called with item=solar.total
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _query_log: query=SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = :item AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(CURDATE(), INTERVAL :start DAY) AND DATE_SUB(CURDATE(), INTERVAL :end DAY) ORDER BY time ASC, params={'item': 9, 'end': 0, 'start': 1}
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _fetchall: Called with query=SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = :item AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(CURDATE(), INTERVAL :start DAY) AND DATE_SUB(CURDATE(), INTERVAL :end DAY) ORDER BY time ASC, params={'item': 9, 'end': 0, 'start': 1}
    2022-07-05  06:58:12 DEBUG    plugins._db_addon   _query: Called with query=SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = :item AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(CURDATE(), INTERVAL :start DAY) AND DATE_SUB(CURDATE(), INTERVAL :end DAY) ORDER BY time ASC, params={'item': 9, 'end': 0, 'start': 1}
    2022-07-05  06:58:12 ERROR    lib.db              Can not execute query: SELECT 1 (args OrderedDict()): (2006, "MySQL server has gone away (ConnectionResetError(104, 'Die Verbindung wurde vom Kommunikationspartner zurückgesetzt'))")
    2022-07-05  06:58:12 WARNING  lib.db              Database [DatabaseAddOn]: Connection error (2006, "MySQL server has gone away (ConnectionResetError(104, 'Die Verbindung wurde vom Kommunikationspartner zurückgesetzt'))")
    2022-07-05  06:58:17 DEBUG    plugins._db_addon   _query: Result of SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = 9 AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_SUB(CURDATE(), INTERVAL 0 DAY) ORDER BY time ASC: ((1656885600000, 77245.0),)
    2022-07-05  06:58:17 DEBUG    plugins._db_addon   _query_item: log=[(1656885600000, 77245.0)]
    2022-07-05  06:58:17 DEBUG    plugins._db_addon   _query_item: value=77245.0 at 2022-07-04 00:00:00
    Ich verwende eine MariaDB als SQL-Speicher.

    Was hat es mit diesem ERROR "Can not execute query" auf sich ?

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Zitat von Sisamiwe Beitrag anzeigen
    Das sollte reichen, wenn täglich ein paar Werte in die DB geschrieben werden.
    Das scheint zu klappen. Hab jetzt Werte für Heute, Gestern, Woche, Monat ... Danke für deine Arbeit, klappt super !
    Jahr ist noch auf 0. Ich nahm an, er würde sofort anfangen das Jahr hochzurechnen. Aber mir scheint er wird damit wohl erst ab 1. Januar nächsten Jahres anfangen ?

    Andere Sache: Die berechneten Werte werden nicht in die Datenbank geschrieben ? Ich hab zwar die Werte Heute und dann Gestern bis Gestern -2. Aber ich kann mir nicht z.B. eine Graphik anzeigen lassen mit den Tagesverbrauchen der letzten 7 Tage oder 30 Tage z.B. (Balkengraphik mit 1 Balken pro Tag). Oder steht ich auf dem Schlauch ?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Foxi352 Beitrag anzeigen
    Kurze Frage: Ich schreibe den Zählerstand nur bei Änderung. Ist das OK oder ist es für das Plugin besser irgendwie zyklisch zu updaten ? Oder mir enforce: yes ?
    Das sollte reichen, wenn täglich ein paar Werte in die DB geschrieben werden.

    Ich bin mit Onkelandy in Kontakt, der eine Wert in die DB schreibt, der nur alle paar Tage aktualisiert wird. Das macht Probleme.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von henfri Beitrag anzeigen
    Wie stehen denn die Chancen, dass du das Add-on auch mit sqlite kompatibel machst?
    Wenn Du mich meinst....
    Ich habe dazu noch keine Meinung. Ich bin mir nicht mal sicher, dass es für die DB-Abfragen ein sqlite-äquivalent gibt.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    Wie stehen denn die Chancen, dass du das Add-on auch mit sqlite kompatibel machst?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Wenn ich mich recht entsinne, führt ein enforce_updates nicht dazu, dass gleiche Werte in die Datenbank geschrieben werden
    Korrekt. Will oder braucht man das, nimmt man enforce_change.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Wenn ich mich recht entsinne, führt ein enforce_updates nicht dazu, dass gleiche Werte in die Datenbank geschrieben werden. Kann mich auch täuschen, aber es wurden mal Lösungen dafür diskutiert aber ich glaub nie umgesetzt.

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Hallo Sisamiwe,

    Das ist ja Mega !! Hatte gerade auch angefangen im Forum zu suchen wie man den Verbrauch vom E und G Zähler (aufsteigende Zählerstände) ausrechnen kann.
    Dein Plugin wird mir sehr viel Arbeit sparen, vielen Dank für die Mühen.

    Ich hab es gestern Mittag mal gestartet und sah bis gestern Abend nur 0 (es waren aber Zählerwerte in der Datenbank). Seite heute Morgen habe ich aber schon den Verbrauch für Heute seit Mitternacht drin. Scheint aber zu klappen.

    Kurze Frage: Ich schreibe den Zählerstand nur bei Änderung. Ist das OK oder ist es für das Plugin besser irgendwie zyklisch zu updaten ? Oder mir enforce: yes ?

    Code:
    Energie:
        Elektrisch:
            Zaehler:
                type: num
                cache: 'yes'
                database: init
                mqtt_topic_in: 'smarty/act_energy_imported_p_plus'
                struct: _priv_db_addon.verbrauch_1
    Zuletzt geändert von Foxi352; 30.06.2022, 07:07.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Warum unterstützt dieses Plugin denn nur MySQL? Das database Plugin ist in der Lage generisch verschiedene Datenbanken anzusprechen. Dazu gibt es in SmartHomeNG eine Abstraktionsbibliothek, die über ein standardisiertes API auf Datenbank Treiber für sqlite3 und mysql (und im Prinzip auf weitere Treiber wie PosgreSQL) zugreift. Das sollte dieses Plugin doch auch können.
    Genau diese db.lib wird für die Verbindung genutzt.
    Ich kann nur MySQL testen. Bei sqlite kommt u.a. Dieser Fehler wegen SQL Syntax.
    Code:
    2022-04-02 17:01:44 ERROR lib.db Can not execute query: SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = ? AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(DATE_ADD(MAKEDATE(YEAR(CURRENT_DATE), 1), INTERVAL MONTH(CURRENT_DATE)-1 MONTH), INTERVAL ? MONTH) AND DATE_SUB(DATE_ADD(MAKEDATE(YEAR(CURRENT_DATE), 1), INTERVAL MONTH(CURRENT_DATE)-1 MONTH), INTERVAL ? MONTH) ORDER BY time ASC (args [9, 1, 0]): near "MONTH": syntax error
    2022-04-02 17:01:44 ERROR plugins.priv_db_addon _query: Error for query SELECT UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(time/1000))) * 1000 as time1, ROUND(MAX(val_num), 1) as value FROM log WHERE item_id = 9 AND val_bool = 1 AND DATE(FROM_UNIXTIME(time/1000)) BETWEEN DATE_SUB(DATE_ADD(MAKEDATE(YEAR(CURRENT_DATE), 1), INTERVAL MONTH(CURRENT_DATE)-1 MONTH), INTERVAL 1 MONTH) AND DATE_SUB(DATE_ADD(MAKEDATE(YEAR(CURRENT_DATE), 1), INTERVAL MONTH(CURRENT_DATE)-1 MONTH), INTERVAL 0 MONTH) ORDER BY time ASC: near "MONTH": syntax error
    2022-04-02 17:01:44 ERROR lib.item.item Item Strom.Zaehler: problem running <bound method DatabaseAddOn.update_item of <plugins.priv_db_addon.DatabaseAddOn object at 0x7f4f0a946f40>>: near "MONTH": syntax error
    Wenn jemand diesbezüglich helfen kann, gern!

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Warum unterstützt dieses Plugin denn nur MySQL? Das database Plugin ist in der Lage generisch verschiedene Datenbanken anzusprechen. Dazu gibt es in SmartHomeNG eine Abstraktionsbibliothek, die über ein standardisiertes API auf Datenbank Treiber für sqlite3 und mysql (und im Prinzip auf weitere Treiber wie PosgreSQL) zugreift. Das sollte dieses Plugin doch auch können.

    Es gibt keinen direkten Weg unter Erhaltung der Daten von sqlite auf mysql umzustellen. Sqlite ist der Standard in SmartHomeNG. mysql ist eher als Option für Leute zu verstehen, die mysql schon nutzen und genau wissen, wie man damit umgeht,

    Einen Kommentar schreiben:


  • Jackhammer
    antwortet
    Hallo zusammen,

    ich hab aktuell die Stock? DB Plugin mit sqlite3 im Einsatz. Kann man das unter Erhaltung der Daten auf MySQL umstellen?

    Einen Kommentar schreiben:

Lädt...
X