NEWS
[gelöst] Regenmenge täglich speichern
-
@wendy2702 Das mit der DB versuche ich gerade. Ich habe ein Synology NAS, auf dem habe ich Mariadb 10 installiert. Allerdings bekomme ich von iobroker keinen Zugriff darauf. Liegt das daran, dass der iobroker im Docker auf dem Synology NAS installiert ist?
-
@mcbirne sagte in Regenmenge täglich speichern:
Liegt das daran, dass der iobroker im Docker auf dem Synology NAS installiert ist?
Die Wahrscheinlichleit liegt bei 95%.
Im Docker müssen dann die Ports freigeschaltet werden die zum verbinden mit der MariaDB benötigt werden.
-
OK, weiß jemand, wie man das macht?
@wendy2702 said in Regenmenge täglich speichern:
@mcbirne sagte in Regenmenge täglich speichern:
Liegt das daran, dass der iobroker im Docker auf dem Synology NAS installiert ist?
Die Wahrscheinlichleit liegt bei 95%.
Im Docker müssen dann die Ports freigeschaltet werden die zum verbinden mit der MariaDB benötigt werden.
OK, weiß jemand, wie man das macht?
-
@mcbirne Wie hast du denn die Ports für Admin und VIS freigegeben?
-
@wendy2702 gar nicht, das hat mit der IP der Synology und dem Port von ioBroker funktioniert
-
Es funktioniert mit dem Mariadb 5. Komisch, aber wenigstens läuft es jetzt.
-
Wie kann ich nun die Daten zu einem festen Zeitpunkt in eine Spalte einer Tabelle schreiben?
-
@mcbirne Welchen Adapter nutzt du denn jetzt zum loggen?
-
@wendy2702 Ich habe jetzt den SQL Adapter mit einer Mysql Datenbank eingerichtet. Ich würde die Werte gerne in eine definierte Tabelle eintragen. Also mit Spalten (Zeit / Regenmenge pro Tag / min Temp / max Temp) So, dass ich Später eine Zeile für jeden Tag habe.
-
@mcbirne Gibt hier verschiedene Tabellen vorlagen im Forum, für Regenmenge habe ich auf Anhieb nichts im Gedächtnis aber man kann die ein oder andere ja an seine Bedürfnisse anpassen oder du schaust die Grafana mal an ob das eventuell deine Anforderungen erfüllt.
-
@wendy2702 Aktuell schreibe die Werte mit _ getrennt in eine Variable. So habe ich sie alle in der DB. Dann kann ich sie später in Excel auseinandernehmen. Das ist zwar nicht schön, aber funktioniert erstmal. Grafana schaue ich mir mal an. Aber das ist ja eher zur grafischen Darstellung.
Am liebsten würde ich per Blockly Werte in die DB in eine bestimmte Tabelle schreiben. Aber das geht scheinbar nicht -
@mcbirne Es wäre schon ausreichend, wenn die Werte in der DB gespeichert werden und die ID ein Wort ist. Leider sind das nur Zahlen. So hat man in der Tabelle eine Zahl (ist das der Zeitstempel?) die ID (wieder eine Zahl) und dann den Wert.
-
wenn du die werte z.b. jede 30 minuten in eine liste(array) schreibst und dieses array in einen dp speicherst. kannst du um 0:00 das array auswerten(höchste und niedrigste temp). diese auswertung schreibst du dann einmal als json - format in einen dp. es gibt sog. json widgets, die dir dann eine tabelle anzeigen können
am monatsende kannst du dann das tägl. json auswerten, alles löschen und wieder von vorne anfangen - so hast du dann eine monat. auswertung welche du wieder in einen dp als json schreibst.
du brachst dazu kein history. deine daten liegen einfach in dp. das reicht für eine tabelle. history brauchst du für grafik-anzeige (man könnte aber auch eine tabelle aus der history erzeugen - das geht aber nur mit javascript )
du kannst das "fast" alles mit blockly machen - das erzeugen des jsons-formats benötigt eine klitzekleines javascript modul - das ist schnell erstellt
trigger alle z.b 30 min.
- dp mit letztem array auslesen
- blockly, welches die werte ausliest
- das nächste ist dann, dass wieder-speichern in das array(liste)
- dann array in dp schreiben
trigger2 um 23:59
- auswertung des array - eine schleife über das array und die temps ausfiltern
- datum auslesen
- regenmenge auslesen
- das ganze in ein json schreiben und dieses in dp
habe mal von mir etwas verändert - du musst einen dp als type feld (myarr) einrichten und einen vom typ text(myjson). diese dann im script angleichen. auch die datenpunkte für die temp musst du im script angleichen (mit deiner quelle)
zum test habe ich alle 20 sekunden die messung notiert und alle 3 minuten wird der "tag" beendet - die regenmenge habe ich nicht integriert, müßte noch rein (ich weiß nicht, ob es täglich einen wert gibt, oder ob er hochgezählt und immer wieder upgedatet wird, ...)
sieht dann so aus:
das script:
das widget ist das json widget vom inventwo adapter (muss installiert sein)
-
super, das werde ich mal testen. Vielen Dank!
-
habe noch ein paar dinge im script geändert
- du kannst definieren, wieviele werte(tage) die tabelle anzeigen soll
- der aktuelle tageswert wird jetzt auch angezeigt
- die neusten werte stehen oben in der tabelle
- damit man das ganze auf längere zeit beobachten kann, habe ich eine sql tabelle eingerichtet - das script schreibt die täglichen werte um mitternacht in die sql datenbank (evtl sollte man da noch andere felder einfügen, damit man besser/leichter auswerten kann)
-
@liv-in-sky
Danke für das Skript.
Aber so ganz klappt es noch nicht. Ich habe die MinTemp und die MaxTemp und die Regenmenge. Diese muss ich nun "nur" noch in die DB schreiben. An der Stelle komme ich leider mit dem Skript nicht weiter. Ich muss:- Alle Werte in ein Array schreiben?
- Die Werte in ein json schrieben?
- Die Werte in die DB schreiben?
Kann ich die Werte nicht direkt in die DB schreiben? Ich habe mir die einzelnen Werte in Datenpunkten gemerkt. Diese werden automatisch aktualisiert. Eigentlich muss ich sie nur in die DB schreiben. also sowas wie:
sqltext=INSERT INTO wetter_aufzeichnung.wetter(DATUM,TempHigh,TempLow,Regenmenge) VALUES
+
("${formatDate(getDateObject((new Date().getTime())), "TT.MM.JJJJ")}","${date1}",${temphigh},"${date2}",${templow} )
Aber wo gebe ich da die Datenpunkte an?Sorry für die für dich simplen Fragen, aber ich steige da noch nicht durch.
-
Ich denke da an sowas...
Nur leider kommen in der DB keine Daten an...
-
bin nicht am rechner - aber im script wird doch in eine sql db geschrieben - das passiert ja nur einmal um 23:59
soweit ich mich erinnere:
- es gibt einen täglichen eintrag mit den daten in eine sql-tabelle - um mitternacht
- es gibt eine json tabelle zum direkten ansehen in einer vis-
- um datenpunkte habe ich mich nciht gekümmert - ich weiß nichtmal, was da drin stehen soll entweder ist es der gesamt-wert von gestern oder der immer wieder aktualisierte wert unterm tag
kann erst morgen nochmal nachsehen.
das blockly mit dem sql ist doch schon drin - man muss halt eine tabelle anlegen. wie der sql-query heißt, ist in dem js-functions-blocky drin
beschreibe bitte nochmal genau, was du wann haben willst - damit ich morgen das nochmal überprüfen kann -
@liv-in-sky
OK, dann brauche ich die json Tabelle nicht, da ich es nicht darstellen möchte. Ich möchte die Werte nur in die DB schreiben.
Es ist ein SQL Befehl in Java drin. Ich wollte aber die Werte aus Datenpunkten nehmen, um sie in die DB zu schreiben. Dazu muss ich den SQL Befehl ändern, aber ich weiß nicht so recht wie...
Ich möchte die Werte gerne hier eintragen:
Also in die DB iobroker.Wetter(Datum, Durchschnittstemp,...)
-
Ich bin einen Schritt weiter. Ich kann jetzt Werte an die DB übergeben, allerdings wird das Datum nicht angezeigt. Ich denke es liegt am Format. Was mache ich falsch?
Das kommt in die DB:
Anstelle von Jahr und Monat und Tag kommen nur 0. Ich habe die Datumsspalte in der Datenbank als Date formatiert.