NEWS
Homematic Wetterstation via RPC / Rega
-
@andersmacher hmmm, da steht nix.
es muss zusätzlich noch ein Systemskript geben, das die täglichen Werte ermittelt.
möglich dass da die Uhrzeit zu ändern wäre. -
@homoran Danke! Das war der entscheidende Hinweis:
Habe mich bisher noch nie mit systeminternen Skripten beschäftigt. Die waren bei mir bis eben immer ausgeblendet. Vermute mal, daß ich da genau wie bei eigenen Skripten einfach den Triggerzeitpunkt verändern kann/darf!?
Hast Du Erfahrung damit:
Angenommen ich "versaue" so ein internes Skript mal. Kann man das dann z. B. durch Neuanlernen des Sensors wieder herstellen (lassen)? -
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Vermute mal, daß ich da genau wie bei eigenen Skripten einfach den Triggerzeitpunkt verändern kann/darf!?
ja!
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Kann man das dann z. B. durch Neuanlernen des Sensors wieder herstellen (lassen)?
bei komplettem Entfernen und Neu anlernen müsste es klappen.
Ob es auch schon mit "Drüberanlernen" klappt weiß ich nicht.
-
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Bei längerem Regen erhälst Du doch vermutlich alle und viele 3 Minuten einen neuen Wert/Trigger und Deine Formel addiert ja "inkrementell" und gerundet Differenzen. Bekommst Du da nicht nach ein paar Stunden spürbare Abweichungen zwischen der von Dir gebildeten "inkrementellen" Summe
Nein, eine Abweichung gibt es nicht. Der Regenmesser misst nur in 0,3 l/m² Abständen. Also nur eine Kommastelle. Der ioBroker hat aber manchmal Probleme mit Kommazahlen zu rechnen und dann kommen Werte wie 1,20000000000001 zustande. Deswegen die Rundung. Hier würde also der Wert auf 1,2 gerundet.
wozu dient diese Verzögerung?
Ich schreibe erst den Wert von 'heute' nach 'gestern' und dann setze ich 'heute' auf null. Um zu verhindern, dass 'heute' schon auf null gesetzt wird bevor der Wert kopiert wurde, habe ich die Verzögerung eingebaut.
Vor zwei Jahren oder so, habe ich den Tageszyklus in der Wetterstation von 7.00 Uhr auf 0.00 Uhr umgestellt. Aber frage mich nicht weshalb ich dann stattdessen das Skript genommen habe. Hatte aber sicher einen Grund.
-
@dr-bakterius Danke für die Erklärungen!
Ich schreibe erst den Wert von 'heute' nach 'gestern' und dann setze ich 'heute' auf null.
Das hatte ich so verstanden/erkannt.
Um zu verhindern, dass 'heute' schon auf null gesetzt wird bevor der Wert kopiert wurde, habe ich die Verzögerung eingebaut.
Das habe ich mir gedacht.
Aber kann das denn wirklich passieren und falls ja, warum nach 100ms nicht mehr? Es gibt doch keine "garantierte" Schreibzeit - oder?
Ich verstehe ja, daß der Schreibvorgang asynchron ist (man also nicht sicher sagen kann, wann er wirklich passiert). Aber nach meinem bisherigen Verständnis ging ich davon aus, daß das wirklich nur das Schreiben betrifft. Irgendwie muß ja durch die Zeile / den Befehl
auch ein Lesevorgang für
ausgelöst werden (denn wie, außer durch Lesen, soll er den Wert sonst in Erfahrung bringen) und da bin ich bisher immer davon ausgegangen, daß der abgeschlossen ist/wird, bevor die nächste Code-Zeile ausgeführt wird. In meiner Vorstellung wird dieser gelesene Wert dann (sofort, jedenfalls bevor zur nächsten Code-Zeile gegangen wird) einer "Prozedur/Funktion" übergeben, die den Wert dann "irgendwann" also asynchron wirklich schreibt.
Ist das von mir ein Irrglaube? -
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Ist das von mir ein Irrglaube?
Das kann ich nicht sagen (aber vielleicht @apollon77). Ich bin hier eben auf Nummer sicher gegangen...
-
@dr-bakterius sagte in Homematic Wetterstation via RPC / Rega:
Der ioBroker hat aber manchmal Probleme mit Kommazahlen zu rechnen und dann kommen Werte wie 1,20000000000001 zustande
Das hat nichts mit ioBroker zu tun, das nennt sich "Informatik :-)) Das ist bei Gleitkommazahlen in jeder programmiersprache bei bestimmten Rechenoperationen so
Zu der anderen farge ...falls ich die verstanden habe: Also wenn du eine variable hast und deren weert schreibst dann wird dieser wert geschrieben auch wenn Du ihn danach auf null setzt ... weil dr wert zum Zeitounktdes aufrufs quasi dupliziert wird
-
@apollon77 Bin nicht sicher, ob ich mit meinem (eigentlich nicht vorhandem JS-Wissen) hier nachfragen sollte/darf. Da ich mich da aber nach und nach "reinfummeln will", traue ich mich einfach mal:
Ich hatte es bisher so verstanden, daß Variablen (in Blockly violett) in JavaSkript, so wie in anderen Programmiersprachen auch, immer sofort geschrieben werden. Von früher (Pascal) meine ich auch in Erinnerung zu haben, daß man das gar nicht schreiben, sondern zuweisen nennt/nannte. Also könnte man sie dann in der nächsten Codezeile auch gleich wieder auslesen und würde definitiv den eben geschriebenen (zugewiesenen) Wert erhalten. Verzögerungen wären dafür demnach unsinnig/nicht erforderlich!?
Aber der Wert für ein ioBroker-Objekt (in Blockly blau) (selbst wenn es nicht zu einem Hardware-Adapter gehört, sondern z. B. unter 0_userdata angelegt ist) und um ein solches handelt es sich bei der obigen Objekt ID "heute" ja, ist keine Variable in diesem Sinne und wird durch das asynchrone Schreiben nicht sofort, sondern mit (unbekannter bzw. nicht definierter) Verzögerung geschrieben (auch wenn diese offenbar meist kurz ist, z. B. unter 100ms)!?
Paßt das so oder muß ich da mein (bisher eingebildetes) Wissen updaten?
-
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
mit (unbekannter bzw. nicht definierter Verzögerung
das was es halt dauert bis der Wert fertig im System geschrieben ist. Mit allen beteiligten Prozessen und I/O Latenzen.
-
unbekannter bzw. nicht definierter
war nicht "wertend" gemeint, nur daß es eben in der Praxis nicht vorhersehbar ist, wie lange es dauert, weil es, genau wie Du ja schreibst, von vielen Randbedingungen abhängt.
Aber das gilt eben nicht für Variablen. Die werden nach meinem bisherigen Verständnis "sofort" geschrieben, also bevor die nächste Codezeile ausgeführt wird!? -
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Aber das gilt eben nicht für Variablen. Die werden nach meinem bisherigen Verständnis "sofort" geschrieben, also bevor die nächste Codezeile ausgeführt wird!?
ja, aber ich hätte "geschrieben" in Anführungszeichen gesetzt
-
@andersmacher Naja wenn du immer den "Wert des Objekts" aus der Datenbank liesst dann ist das nicht mehr statisch. Daher weise es doch einer Variable zu. EInmal lesen, wert haben ... Fertig.
-
@apollon77 Wenn ich den Wert eines Objektes in einem Skript oft/öfter brauche, und sichergestellt ist, daß er sich nicht im Laufe der Skriptabarbeitung ändert oder eine etwaige Änderung mein Skript nicht beeinträchtigt, mache ich das tatsächlich bereits so, daß ich ihn einer Variablen zuweise.
Aber ich muß gestehen, daß ich jetzt gerade den Zusammenhang zwischen der Fragestellung und dem von Dir hier neu "eingeführten" Begriff "statisch" nicht mehr Blicke. Die Bezeichnung "statisch" kenne ich bisher nur für Variable, die auch nach Beendigung einer Routine (ups, ein "Begriff von früher"), im vorliegenden Fall besser Skript genannt, weiterhin existieren und nutzbar sind. Das ist ja aber ein ganz anderes Thema.
-
@andersmacher sagte in Homematic Wetterstation via RPC / Rega:
Die Bezeichnung "statisch"
ist auch nicht unbedingt eine "Bezeichnung", sondern bedeutet, dass sich der Wert beim erneuten Auslesen geändert haben kann.
Je nach Anwendungsfall kann das eino oder das andere besser sein.
Wobei ich dachte es geht dir um schreiben deiner "Variable" in einen Datenpunkt, und nicht um das Auslesen x-beliebiger Werte
-
@homoran Ich glaube, wir (Du, @apollon77 und ich) reden gerade ein weinig an einander vorbei und inzwischen sind wir (ok, da bin ich wohl Schuld dran durch meine Frage zum Skript von @Dr-Bakterius) ja auch nicht mehr beim Ausgangsthema "Homematic Wetterstation via RPC / Rega", sondern bei JS-Interna.
Wenn @Dr-Bakterius, wie er schreibt, nur "auf Nummer sicher gegangen" ist und die Verzögerung nicht wirklich notwendig ist, habe ich gar kein Problem, weil dann alles zu meinem derzeitigen JS-Verständnis bezüglich Schreib- / Zuweisungsvorgängen paßt:
Variablen sofort (ich nenn das ´mal synchron) und Werte in Datenpunkte asynchron (also eben unvorhersehbar später).Wenn das so stimmt, wäre meine obige Frage zum Skript damit beantwortet und ich würde dem Titel dann auch "Gelöst:" voran stellen.