NEWS
[gelöst] Regenmenge täglich speichern
-
@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.
-
versuche es mal mit text im Datumsfeld
oder : ich glaube man kann sowas auch automatisch generieren lassen - evtl hilft google weiter - also wenn du einen eintrag in die datenbank machst, dass dann autom ein datum generiert wird - das datumsfeld als text ist eigentlich keine gute lösung, dass werd ich auch bei mir ändern
so stellt man z.b. den automatischen timestamp - der wird gesetzt, wenn ein eintrag in die sql-db erzeugt wird - danach kann man dann besser suchen - man muss nur noch en eigentlichen wert in die db geben
wenn ich das datum selbst eingeben möchte, geht es bei mir damit (der letzte wert - DatumSQL):
INSERT INTO wetter_aufzeichnung.wetter(DATUM,ZeitHoch,TempHigh,ZeitTief,TempLow,DurchschnittTemp,linux_ts,DatumSQL) VALUES ("07.04.2021","14:38",5.2,"14:42",3.5,4.3,"1617800869469","2021-04-07")
evtl musst du noch anführungszeichen einfügen
nicht getestet:
-
@liv-in-sky super, die Hochkommata sind die Lösung. Danke!