Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

  • aschwith
    antwortet
    Nabend zusammen,

    wurde eigentlich schonmal diskutiert, für das Database Plugin eine diskrete Integrationsfunktion bereitzustellen? Sprich: Summe (duration * value)? Ich meine mich zu erinnern, dass sowas schonmal diskutiert wurde.
    Als Anwendung habe ich Aktoren, die die Momentanleistung ausgeben, logge diese in der DB und möchte dann für beliebige Zeiträume den Energieverbrauch bestimmen.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Via der WebGUI des Database Plugins kann man im Develop nun auch die Anzahl aller Einträge in der LOG Tabelle auslesen (das hatte mal jemand angefragt...)

    Einen Kommentar schreiben:


  • smai
    antwortet
    Soweit ich weiss waren die Queries im sqlite Plugin nicht grundsätzlich anders. Das von dir beschriebene Problem hattest du also auch da.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Ok. Das mit den aggregierten war bislang und mit sqlite eine gute Möglichkeit...
    Habe mit dem neuen database plugin noch nicht die Erfahrung - daher die Vorsicht
    Langfristig wäre es gut, wenn für Verbrauchwerte eines gewissen Alters diese auf stunden, tags oder monats werte aggregiert werden könnten. Ich habe auch so die plots gewählt. Kurzfristig eine höhere Auflösung, langfristig reichen Summenwerte... aber das sollte ja mit ein paar Befehlen lösbar sein...

    Einen Kommentar schreiben:


  • smai
    antwortet
    Prinzipiell hast du recht.

    Die Idee ist aber eigentlich nicht, dass du berechnete Verbrauchsdifferenzen in die DB schreibst und erst recht nicht bereits aggregierte. Stattdessen solltest du die rohen Zählerwerte mit möglichst hoher Auflösung schreiben und diese dann per   diff:  abfragen.

    Aber so richtig geeignet für derartige Zeitabschnitts-Abfragen ist das database Plugin aktuell nicht. Man kann ja nicht so einfach nach bestimmten Abschnitten stückeln sondern nur Beginn, Ende und Anzahl Datenpunkte angeben.

    Wieso eigentlich 00:01? Wenn schon 00:00.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Ich bin zum Thema duration noch einmal ins grübeln gekommen:

    Folgender Fall:
    * Ich ermittle den Monatsverbrauch (z.B. Strom) durch ein Item, welches per crontab kurz nach Mitternacht getriggert wird.
    * per eval ermittelt es seinen Wert (=Differenz aktueller Wert und der vom Monatsanfang)
    * die Einträge werden in die database geschrieben
    * In der Visu sollen die Verbrauchswerte der letzten 12 Monate und den vorigen 12 Monate angezeigt werden.

    Wenn jetzt duration die Dauer bis zum nächsten Eintrag darstellt, dann habe ich dort ein Problem. Denn das Item mit Timestamp "Monatsanfang" beinhaltet den Wert des letzten Monats.

    Wenn ich es richtig verstanden habe, müsst ich am Monatsende (um z.B. 1.12.18 00:01) rückwirkend den Verbrauchswert ermitteln, dann mit Timestamp vom letzten Monatsanfang (=1.11.18 00:01) und duration (30 x 24 x 3600 x 1000) den Wert in die Datenbank schreiben, sodass die Werte auch korrekt sind, oder?

    Hat das schon jemand so gemacht und kann evtl. ein paar Zeilen posten?



    Danke
    Markus

    Einen Kommentar schreiben:


  • startrix
    antwortet
    Zitat von startrix Beitrag anzeigen

    schorge - konntest du das Problem lösen? Ich stehe gerade vor der selben Fehlermeldung.

    Viele Grüße
    Jannis
    So, kurze Ergänzung, nach dem ich mir nun nochmal eine frische SmartHomeNG Version installiert habe, bekam ich denselben Fehler.
    Dann hab ich Testweise mal versucht eine lokale (Maria DB auf dem Raspi) zu nutzen. Dies ging ohne Probleme.

    Da ich die DB aber auf dem NAS haben möchte, ging die Fehlersuche weiter.

    Nach dem ich eine DB über die Shell angelegt habe, konnte ich diese ohne Probleme einbinden. Die DB, welche ich über phpmyAdmin angelegt hatte, war wohl das Problem.

    Nun läuft es erstmal

    Viele Grüße Jannis

    & allen frohe Weihnachten.

    Einen Kommentar schreiben:


  • smai
    antwortet
    Richtig. Aber beim jüngsten ist es nicht 0 sondern NULL (weil undefiniert und nicht Dauer = 0 Sekunden)

    Einen Kommentar schreiben:


  • gama
    antwortet
    Ok, d.h. bevor ich den jüngsten Eintrag hinzufüge, suche ich den aktuellen Eintrage, berechne die Differenzzeit, ändere den bestehenden Eintrag ab, ergänze den jünsten mit 0?

    Einen Kommentar schreiben:


  • smai
    antwortet
    Die Duration ist jeweils die Zeit bis zum nächsten Eintrag.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Hi, ich möchte ein paar historische Daten (Verbrauch der letzten Jahre) bei meinem monatlichen Verbrauchs-Item hinzufügen. Laut README müsste ich ja nur ein paar Einträge in der log Tabelle anlegen. Ich bin mir jedoch bei duration nicht sicher...
    Ich habe einen Vertrauchswert, z.B. 1.12.2018 um 00:01 Uhr. Dieser Wert beinhaltet den Verbrauch vom Monat November. Also "time" und "changed" bekommen diesen Zeitwert. Sind dann in duration die Milisekunden von letzten Eintrag (z.B. 1.11.2018 00:02)?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von psilo Beitrag anzeigen
    erneut die Frage
    Hat das Cleanup die Sachen gelöscht, die Du erwartet hast? Ich habe leider nicht drauf geachtet und nur acht gegeben, dass das was ich brauche noch da ist ;-)

    Ja, das Cleanup hat alle Einträge, wie gewünscht, gelöscht. d.h. alle historischen Daten aus der Tabelle LOG, für die in der Tabelle ITEM keine Zuordnung existiert.
    Was (leider) nicht passiert, ist dass die Größe der DB dadurch kleiner wird. Die Größe bleibt gleich. Daher auch meine Frage nach der Defragmentierung. Dafür gibt es wohl auch eine Funktion mit optimize_table.

    PS: Bin leider nicht früher dazu gekommen, auf Deine Frage zu antworten.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    erneut die Frage
    Hat das Cleanup die Sachen gelöscht, die Du erwartet hast? Ich habe leider nicht drauf geachtet und nur acht gegeben, dass das was ich brauche noch da ist ;-)
    Ich fände schon fair, wenn man ein Feature baut, dann wenigstens etwas tieferes Feedback zu kriegen

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Wie "defragmentiere" bzw. "optimiere" ich bitte eine DB???? Haben wir dafür Funktionen? Defragmentieren kenne ich aus Dateisystemen, aber nicht Datenbanken. Optimieren könnte Index neu aufbauen sein, aber das kann ich ja direkt auf DB Ebene machen?!

    Wichtig: das ist nicht mein Plugin. Ich habe bisher nur mit dem bestehenden Funktionsumfang ein WebIF dazugebaut. Tiefer einzusteigen sprengt derzeit meine Zeit.

    Hat das Cleanup die Sachen gelöscht, die Du erwartet hast? Ich habe leider nicht drauf geachtet und nur acht gegeben, dass das was ich brauche noch da ist ;-)

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von psilo Beitrag anzeigen
    stabil ja, es wird aber nur mit dem DEV Core gehen!
    Hab auf Develop umgestellt und das Feature getestet. Bei mir hat es ziemlich lange gedauert. Liegt wohl daran, dass bei mir alles auf einem RPI3 mit USB-Stick läuft.

    ​​​​​​Ließe sich auch noch ein Button zum Defragmentieren bzw Optimieren der DB einbauen?

    Einen Kommentar schreiben:

Lädt...
X