NEWS
SQL Beschreiben mit Blockly
-
Hallo Gemeinde,
ich habe anscheinend eine Gedankenblockade. Mit der suche konnte ich diese ebenfalls nicht lösen.
Ich möchte mein Stromverbrauch in meine SQL Tabelle schreiben. Aber welche Blockly Aktion nehme ich her? sendTo? Hätte da jemand ein Beispiel für mich, so das ich aus der Misere herausfinde?
-
Schreib die Werte doch in einen Datenpunkt und aktiviere die Protokollierung mit dem SQL-Adapter.
-
@sectorchan
Wie @David-G schon schrieb: Installiere den SQL-Adapter und schreibe den Stromverbrauch in einen DP (soweit es den nicht schon gibt).
Dann aktivierst Du an dem DP die Protokollierung.Ein Bild sagt mehr als tausend Worte:
So mache ich das mit meinem Gasverbrauch:
Den laufenden Verbrauch am Tag schreibe ich in einen DP "verbrauch".
Jede Nacht schreibe ich den dort aufgelaufenen Wert in einen DP "tagesverbrauch" und setze "verbrauch" wieder auf 0. -
@sectorchan ja, sendTo und dann die passenden Parameter. Ist aber so Tricky gewesen die Parameter richtig zu übergeben das ich mir eine Javascript-Funktion gebaut habe (vermutlich mit Hilfe hier aus dem Forum):
sendTo("sql.0", "storeState", { "id": myId, "state": { "val": myVAL, "ts": myTS, "ack": true } }, async function (result) { //console.log(result); });
Die verbesserte version die ich zur Zeit einsetze hat den Vorteil das man damit auch Werte überschreiben kann (Wenn es der gleiche Zeitstempel ist:
let statement = ` REPLACE INTO iobroker.ts_number (id, ts, val, ack, _from, q) VALUES ((SELECT id FROM iobroker.datapoints WHERE name = "${id}"), ${ts}, ${value}, ${ack}, ${from}, ${q}) ` //log(statement) sendTo("sql.0", "query", statement, e => { if (e && e.error) { log(e.error) } else { // log("Done!") } })
Hier als Blockly-Export:
<block xmlns="https://developers.google.com/blockly/xml" type="procedures_defcustomnoreturn" id="ppt|ajrQncolYtqyk1q1" x="238" y="-587"> <mutation statements="false"> <arg name="id" varid="RtPM2%k{F`%!q{Rk]|a."></arg> <arg name="ts" varid=";!)T*gf?`G!J~iZ#4,CG"></arg> <arg name="value" varid="epT$}5hcYx3b^`jz:~#d"></arg> <arg name="ack" varid="GAGtL,+-C3?x`s;u1nsR"></arg> <arg name="from" varid="rHJp6FCFj,U],$ysF[xX"></arg> <arg name="q" varid="p~yp5Fejp5Y|*K$i[(u%"></arg> </mutation> <field name="NAME">InsertToHistory</field> <field name="SCRIPT">bGV0IHN0YXRlbWVudCA9IGANCiAgICBSRVBMQUNFIElOVE8gaW9icm9rZXIudHNfbnVtYmVyIA0KICAgICAgICAoaWQsIHRzLCB2YWwsIGFjaywgX2Zyb20sIHEpIA0KICAgICAgICBWQUxVRVMgKChTRUxFQ1QgaWQgRlJPTSBpb2Jyb2tlci5kYXRhcG9pbnRzIFdIRVJFIG5hbWUgPSAiJHtpZH0iKSwgJHt0c30sICR7dmFsdWV9LCAke2Fja30sICR7ZnJvbX0sICR7cX0pDQpgDQovL2xvZyhzdGF0ZW1lbnQpDQpzZW5kVG8oInNxbC4wIiwgInF1ZXJ5Iiwgc3RhdGVtZW50LCBlID0+IHsNCiAgICBpZiAoZSAmJiBlLmVycm9yKSB7DQogICAgICAgIGxvZyhlLmVycm9yKQ0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIGxvZygiRG9uZSEiKQ0KICAgIH0NCn0p</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block>
Einsatz:
Die Funktion habe ich aus dem Forum: https://forum.iobroker.net/topic/55463/sql-sendto-problem-storestate-vs-update/8?_=1666164726503
Beides setzt voraus das du einen Datenpunkt mit aktivierter SQL Protokollierung hast.
Der Vorteil bei diesen beiden Funktionen ist das du den Zeitstempel mitgeben kannst. Du kannst also um Mitternacht auch noch den Wert für 08:00 Uhr schreiben -
Hi, Danke für euren Input.
Ja einen Datenpunkt mit dem Täglichen Verbrauch gibt es tatsächlich, da ich damit den Verbrauch berechne.
Danke an @BananaJoe für das Blockly, aber ich werde mit der Idee von @David-G und @Codierknecht gehen, das geht einfacher, simpler und wahrscheinlich weniger Fehleranfällig.Aber ich kann da nicht auswählen, das eine eigene Tabelle verwendet wird oder?
-
@sectorchan sagte in SQL Beschreiben mit Blockly:
Aber ich kann da nicht auswählen, das eine eigene Tabelle verwendet wird oder?
Nein. Dazu könntest du aber halt wie im 2. Beispiel ein SQL Statement setzen, In dem kannst du natürlich dann eine andere Tabelle und/oder Datenbank nutzen.
Mit den Daten wird dann aber float oder ECharts nicht umgehen können denke ich ... falls das mal wichtig wird