NEWS
[gelöst] Datenpunkt mit Blockly aus SQL-History auslesen
-
Hallo,
ich bin absoluter Neuling was Iobroker betrifft und hoffe, ihr verzeiht mir meine eventuellen dummen Fragen
Ich versuche mich gerade etwas in Blockly einzuarbeiten. Gerne würde ich eine Berechnung für den gesamten Stromverbrauch in Wh (pro laufenden Tag) bewerkstelligen. Dazu lass ich mir erst einmal den Datenpunkt ConsumedPower von meinem Shelly em3 in die SQL-History schreiben. Als nächstes würde ich mit Blockly den ersten Eintrag des laufenden Tages (00:00h) sowie den aktuell letzten Eintrag des laufenden Tages auslesen wollen. Die Subtraktion des letzten Eintrags mit dem ersten Eintrag ergäbe ja dann die konsumierte Menge in Wh. Soweit meine Theorie. Mein Problem dabei ist jedoch, dass ich partout nicht herausgefunden habe, wie ich in Blockly an die SQL-History rankomme um die gewünschten Werte auszulesen.
Ich hoffe, ich habe mich einigermassen verständlich ausgedrückt, falls nicht, fragt bitte einfach nach.
Wäre über einen Tipp oder sogar Lösungsvorschlag sehr dankbar.
LG Roly
-
@roga sagte in Datenpunkt mit Blockly aus SQL-History auslesen:
Mein Problem dabei ist jedoch, dass ich partout nicht herausgefunden habe, wie ich in Blockly an die SQL-History rankomme um die gewünschten Werte auszulesen.
Das funktioniert mit
sendTo
. Entweder direkt ein SQL-Statement senden, oder die History-Daten abfragen. Siehe:- https://github.com/ioBroker/ioBroker.sql#custom-queries
- https://github.com/ioBroker/ioBroker.sql#access-values-from-javascript-adapter
Das sendTo kann man sich auch mit Blockly zusammenbauen - ist nur etwas sperrig.
-
@roga sagte: ersten Eintrag des laufenden Tages (00:00h) sowie den aktuell letzten Eintrag des laufenden Tages auslesen wollen.
Einfacher ist es, sich täglich den Wert um 23:29 Uhr in einem eigenen Datenpunkt zu merken. Mit diesem Wert kann man dann rechnen.
Noch einfacher: Der Sourceanalytix-Adapter liefert Periodenwerte (Tag, Woche, Monat, Jahr). -
Danke für den Hinweis. Leider stehe ich wirklich auf dem Schlauch und weiss nicht, wie ich das ins Blockly umsetzen soll. Ich habe mir das hier gebastelt, bekomme aber keine Rückwerte angezeigt. Wie kann ich mir das Ergebnis meiner SQL-Query anzeigen lassen?
Ist meine SQL-Query so überhaupt korrekt bzw. steht der Datenpfad genau so wie im orignialen Shelly-Adapter auch im SQL-Adapter?
Select * FROM shelly.0.SHEM-3#349454716E9D#1.Total.ConsumedPower
oder müsste er so lauten?
Select * FROM SHEM-3#349454716E9D#1.Total.ConsumedPower
Bin für jede Hilfe sehr dankbar!
-
@roga sagte in Datenpunkt mit Blockly aus SQL-History auslesen:
Ist meine SQL-Query so überhaupt korrekt
Nein, in SQL speichert man in Tabellen. Die Daten vom ioBroker liegen in verschiedenen Tabellen. Wenn Du nach der Objekt-ID filtern möchtest, dann musst Du einen Join auf eine andere Tabelle durchführen. Und wenn Du mit
*
selektierst, bekommst Du ja alle Ergebnisse.Lass doch die Datenbank für Dich rechnen. Ich kann hier nur keinen SQL-Grundkurz in dem Thread erstellen um alles zu erklären. Daher ja der andere Vorschlag ohne Custom Queries. Dann braucht man auch kein SQL-Wissen.
-
@haus-automatisierung sagte in Datenpunkt mit Blockly aus SQL-History auslesen:
Die Daten vom ioBroker liegen in verschiedenen Tabellen.
Ich glaube genau da liegt bei mir das Problem. Ich weiss offensichtlich nicht, wie ich eine Tabelle im Iobroker ansprechen muss.
Für mein Verständnis:
Wenn ich einen Datenpunkt in der History (SQL-Adapter) haben möchte, dann aktiviere ich das ja, in dem ich in der Konfiguration des gewünschten Datenpunkts die Einstellungen für sql.0 aktiviere. Nun sollte doch jedes Mal, wenn sich der Wert des gewünschten Datenpunkts verändert, ein neuer Eintrag in der SQL-History erstellt werden, der zum korrespondierenden, neuen Wert auch noch den dazugehörigen Zeitstempel mitspeichert, ist das soweit korrekt? Wenn dem so ist, existiert jetzt eine neue Tabelle in der History für diesen einen Datenpunkt die nur aus zwei Spalten (Zeitstempel und aktueller Wert) besteht? Wenn ja, wie kann ich diese Tabelle finden bzw. ansprechen?
Wenn hierzu ein Paar klärende Worte geäussert werden könnten, würde mir das vermutlich sehr viel weiterhelfen.
Wie schon erwähnt, ich bin noch ganz frisch mit dem Iobroker unterwegs und mache daher nur kleine Fortschritte. Mir ist noch nicht alles klar, wie der Iobroker aufgebaut ist und wie er funktioniert, aber ich möchte es unbedingt herausfinden
Vielen Dank!
-
@roga sagte in Datenpunkt mit Blockly aus SQL-History auslesen:
Nun sollte doch jedes Mal, wenn sich der Wert des gewünschten Datenpunkts verändert, ein neuer Eintrag in der SQL-History erstellt werden, der zum korrespondierenden, neuen Wert auch noch den dazugehörigen Zeitstempel mitspeichert, ist das soweit korrekt?
Ja, nimm doch einfach mal einen SQL-Client und guck in die Datenbank
Dein Problem hat ja gerade nichts mit dem ioBroker zu tun, sondern mit SQL-Grundlagen. -
@roga
ich mache es wie folgt:
Mit dem Sourceanalytix-Adapter die einzelnen werte der Strom Verbraucher loggen.Dann Habe ich mir einen Datenpunkte erzeugt im Beispiel 1-Verbrauch Tag-Gestern.
Dieser Punkt wird einmal am Tag um 23:57 Uhr mit den Werten aus dem Sourceanalytix-Adapter aktualisiert:
Das könnte man dann weiter spielen für Woche - Monat - Jahr.
Vielleicht Hilft es dir ja weiter.... -
@haus-automatisierung Danke! Du hattest recht, ich habe mir einen SQL-Client (MYSQL-Workbench) installiert und mich ein wenig in SQL eingearbeitet (ja, hat etwas gedauert
hat mich dann aber ein großes Stück weitergebracht.
Meine Anfrage wäre hiermit gelöst!