Unklare Logausgabe wegen "at" und "dbRep"

Begonnen von wowogiengen, 20 September 2021, 20:36:59

Vorheriges Thema - Nächstes Thema

wowogiengen

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


rudolfkoenig

set ist kein perl Befehl.
Die Zeile sollte vmtl. so ausschauen:
define atdbRepSchlafzimmer3 at *00:40 {if ($mday == 1) {fhem("set dbRepSchlafzimmer3 averageValue writeToDB")}}

wowogiengen

Hallo Rudolf,
ich war immer der Meinung, dass das at-Kommando korrekt ist...
Habs aber nie direkt ausprobiert, bzw. wegen dem if-statement müsste ich es direkt am 1. jeden Monats ausprobieren.
Hab jetz mal probehalber die Bedingung umgedreht, und den gleichen Fehler erhalten.
Als ich dann das eigentliche Kommando in fhem("") eingebettet habe, ist es ohne Fehler gelaufen.

Vielen Dank...
Grüße
Wolfgang