Hallo,
nachdem mir wiedereinmal keine Daten im Plot erschienen sind, habe ich heute das Log angeschaut...
Ich habe mir mehrere at-Devices zurechtgebaut, die in Verbindung mit DbRep-Devices verschiedene Werte in die Datenbank schreiben sollen.
Die at-Kommandos sind dabei wie folgt aufgebaut:
define atdbRepBad1 at *00:00 set dbRepBad1 maxValue writeToDB
define atdbRepBad2 at *00:20 set dbRepBad2 averageValue writeToDB
define atdbRepBad3 at *00:40 {if ($mday == 1) {set dbRepBad3 averageValue writeToDB}}
Ich habe dann noch weiterer at-Kommandos für Büro, Wohn- und Schlafzimmer
define atdbRepBuero1 at *01:00 set dbRepBuero1 maxValue writeToDB
define atdbRepBuero2 at *01:20 set dbRepBuero2 averageValue writeToDB
define atdbRepBuero3 at *00:40 {if ($mday == 1) {set dbRepBuero3 averageValue writeToDB}}
define atdbRepWohnzimmer1 at *02:00 set dbRepWohnzimmer1 maxValue writeToDB
define atdbRepWohnzimmer2 at *02:20 set dbRepWohnzimmer2 averageValue writeToDB
define atdbRepWohnzimmer3 at *00:40 {if ($mday == 1) {set dbRepWohnzimmer3 averageValue writeToDB}}
define atdbRepSchlafzimmer1 at *03:00 set dbRepSchlafzimmer1 maxValue writeToDB
define atdbRepSchlafzimmer2 at *03:20 set dbRepSchlafzimmer2 averageValue writeToDB
define atdbRepSchlafzimmer3 at *00:40 {if ($mday == 1) {set dbRepSchlafzimmer3 averageValue writeToDB}}
Für jedes dieser obigen atdbRep.* Devices habe ich analog dazu dbRep.* Devices eingerichtet (hier nur mal die defines dazu, die einzelnen Attribute sind unterschiedlich, aber funktionieren vom Prinzip her:
define dbRepBad1 DbRep mySQLDB
die Attribute
aggregation und
allowDeletion und
timestamp_begin sowie
timestamp_end habe ich auf jeweils sinnvolle Werte für diese DbRep-Devices gesetzt...
Das Problem war nun, dass ich im Log dieses hier stehen habe:
2021.09.01 00:00:00 5: exec at command atdbRepBad1
2021.09.01 00:00:00 5: redefine at command atdbRepBad1 as *00:00 set dbRepBad1 maxValue writeToDB
2021.09.01 00:20:00 5: exec at command atdbRepBad2
2021.09.01 00:20:00 5: redefine at command atdbRepBad2 as *00:20 set dbRepBad2 averageValue writeToDB
2021.09.01 00:40:00 5: exec at command atdbRepBad3
2021.09.01 00:40:00 1: ERROR evaluating {if ($mday == 1) {set dbRepBad3 averageValue writeToDB}}: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22579) line 1.
2021.09.01 00:40:00 3: atdbRepBad3: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22579) line 1.
2021.09.01 00:40:00 5: redefine at command atdbRepBad3 as *00:40 {if ($mday == 1) {set dbRepBad3 averageValue writeToDB}}
2021.09.01 00:40:00 5: exec at command atdbRepBuero3
2021.09.01 00:40:00 1: ERROR evaluating {if ($mday == 1) {set dbRepBuero3 averageValue writeToDB}}: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22580) line 1.
2021.09.01 00:40:00 3: atdbRepBuero3: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22580) line 1.
2021.09.01 00:40:00 5: redefine at command atdbRepBuero3 as *00:40 {if ($mday == 1) {set dbRepBuero3 averageValue writeToDB}}
2021.09.01 00:40:00 5: exec at command atdbRepSchlafzimmer3
2021.09.01 00:40:00 1: ERROR evaluating {if ($mday == 1) {set dbRepSchlafzimmer3 averageValue writeToDB}}: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22581) line 1.
2021.09.01 00:40:00 3: atdbRepSchlafzimmer3: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22581) line 1.
2021.09.01 00:40:00 5: redefine at command atdbRepSchlafzimmer3 as *00:40 {if ($mday == 1) {set dbRepSchlafzimmer3 averageValue writeToDB}}
2021.09.01 00:40:00 5: exec at command atdbRepWohnzimmer3
2021.09.01 00:40:00 1: ERROR evaluating {if ($mday == 1) {set dbRepWohnzimmer3 averageValue writeToDB}}: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22582) line 1.
2021.09.01 00:40:00 3: atdbRepWohnzimmer3: Can't locate object method "averageValue" via package "writeToDB" (perhaps you forgot to load "writeToDB"?) at (eval 22582) line 1.
2021.09.01 00:40:00 5: redefine at command atdbRepWohnzimmer3 as *00:40 {if ($mday == 1) {set dbRepWohnzimmer3 averageValue writeToDB}}
2021.09.01 01:00:00 5: exec at command atdbRepBuero1
2021.09.01 01:00:00 5: redefine at command atdbRepBuero1 as *01:00 set dbRepBuero1 maxValue writeToDB
2021.09.01 01:20:00 5: exec at command atdbRepBuero2
2021.09.01 01:20:00 5: redefine at command atdbRepBuero2 as *01:20 set dbRepBuero2 averageValue writeToDB
2021.09.01 02:00:00 5: exec at command atdbRepSchlafzimmer1
2021.09.01 02:00:00 5: redefine at command atdbRepSchlafzimmer1 as *02:00 set dbRepSchlafzimmer1 maxValue writeToDB
2021.09.01 02:20:00 5: exec at command atdbRepSchlafzimmer2
2021.09.01 02:20:00 5: redefine at command atdbRepSchlafzimmer2 as *02:20 set dbRepSchlafzimmer2 averageValue writeToDB
2021.09.01 03:00:00 5: exec at command atdbRepWohnzimmer1
2021.09.01 03:00:00 5: redefine at command atdbRepWohnzimmer1 as *03:00 set dbRepWohnzimmer1 maxValue writeToDB
2021.09.01 03:20:00 5: exec at command atdbRepWohnzimmer2
2021.09.01 03:20:00 5: redefine at command atdbRepWohnzimmer2 as *03:20 set dbRepWohnzimmer2 averageValue writeToDB
Wie man sehen kann, taucht das Problem nur um 00:40 auf, zu den anderen Zeiten scheint alles ok zu sein.
Das einzige, was mir jetzt auffällt ist, dass sich um 00:40 einige at-Kommandos mit verschiedenen DbRep-Devices überschneiden, bzw. überschnitten haben - ich habe die Zeitangaben gerade korrigiert, so dass alle 20 Minuten ab 00:00 jeweils ein anderes at-Kommando ausgeführt wird:
Alt:
atdbRepBad1 | (Next: 00:00:00) |
atdbRepBad2 | (Next: 00:20:00) |
atdbRepBad3 | (Next: 00:40:00) |
atdbRepBuero1 | (Next: 01:00:00) |
atdbRepBuero2 | (Next: 01:20:00) |
atdbRepBuero3 | (Next: 00:40:00) |
atdbRepSchlafzimmer1 | (Next: 02:00:00) |
atdbRepSchlafzimmer2 | (Next: 02:20:00) |
atdbRepSchlafzimmer3 | (Next: 00:40:00) |
atdbRepWohnzimmer1 | (Next: 03:00:00) |
atdbRepWohnzimmer2 | (Next: 03:20:00) |
atdbRepWohnzimmer3 | (Next: 00:40:00) |
Neu:
atdbRepBad1 | (Next: 00:00:00) |
atdbRepBad2 | (Next: 00:20:00) |
atdbRepBad3 | (Next: 00:40:00) |
atdbRepBuero1 | (Next: 01:00:00) |
atdbRepBuero2 | (Next: 01:20:00) |
atdbRepBuero3 | (Next: 01:40:00) |
atdbRepSchlafzimmer1 | (Next: 02:00:00) |
atdbRepSchlafzimmer2 | (Next: 02:20:00) |
atdbRepSchlafzimmer3 | (Next: 02:40:00) |
atdbRepWohnzimmer1 | (Next: 03:00:00) |
atdbRepWohnzimmer2 | (Next: 03:20:00) |
atdbRepWohnzimmer3 | (Next: 03:40:00) |
Ich kann mir gut vorstellen, dass das die Ursache für die Fehlermeldung war, habe gerade auch gesehen, dass der Fehler jeden 1. des Monats aufgetreten ist - an den anderen Tagen sollte ja das
if ($mday == 1) dafür sorgen, dass das DbRep nicht ausgeführt wird.
Aber die Fehlermeldung passt meiner Meinung nach nicht zu den Umständen, da zu anderen Zeiten die Methode '
averageValue' ja gefunden und ausgefürt werden kann...
Viele Grüße
Wolfgang
set ist kein perl Befehl.
Die Zeile sollte vmtl. so ausschauen:
define atdbRepSchlafzimmer3 at *00:40 {if ($mday == 1) {fhem("set dbRepSchlafzimmer3 averageValue writeToDB")}}