invalid readings bei addLog

Begonnen von kwbo, 15 November 2013, 15:35:02

Vorheriges Thema - Nächstes Thema

kwbo

Hallo zusammen,

ich brauche mal wieder Hilfe. Ich versuche, die Plotabrisse durch die Funktion addLog abzufangen. Leider erhalte ich in allen FHT-Logs die Meldung "invalid readings". Ich vermute, dass in meiner Syntax irgendwo der Wurm steckt, weil ich versuche, alle sechs Devices, die mit "FHT_" anfangen mit einem Befehl zu behandeln jeweils die Temperatur- und Actuatorwerte auszulesen.

define addLog at +*01:00 {addLog("FHT.*","actuator");;addLog("FHZ.*","desired-temp");;addLog("FHT.*","measured-temp");;addLog("Schlafz_Fenster","Window");;addLog("WG_Tuer","Window");;}
attr addLog room 99_System


Wie man an dem Log-Auszug sieht, funktioniert das addLog für die zwei weiteren Einzeldevices "Schlafz_Fenster" und "WG_Tuer", jedoch nicht für die anderen FHZ-Devices, obwohl ich in jedem der sechs Logfiles die "invalid readings"-Einträge stehen habe. Geht das so nicht oder schlägt da wieder meine mangelnde Perl-Kenntnis zu?

2013-11-15_14:08:43 FHT_Wintergarten desired-temp: 20.5
2013-11-15_14:09:49 WG_Tuer Window: Open
2013-11-15_14:18:01 WG_Tuer Window: Open
2013-11-15_14:18:19 FHT_Wintergarten measured-temp: 22.1
2013-11-15_14:22:07 WG_Tuer Window: Open
2013-11-15_14:23:55 FHT_Wintergarten actuator: addLog: invalid reading   << addLog
2013-11-15_14:23:56 FHT_Wintergarten measured-temp: addLog: invalid reading   << addLog
2013-11-15_14:23:56 WG_Tuer Window: Open   << addLog
2013-11-15_14:38:31 WG_Tuer Window: Open
2013-11-15_14:39:23 FHT_Wintergarten measured-temp: 22.0
2013-11-15_14:42:37 WG_Tuer Window: Open


Es wäre super, wenn mir jemand dabei auf die Sprünge helfen könnte.
Danke und Gruß,
Werner

Puschel74

#1
Hallo,

ZitatWie man an dem Log-Auszug sieht, funktioniert das addLog für die zwei weiteren Einzeldevices "Schlafz_Fenster" und "WG_Tuer"
Jep.
Zitatjedoch nicht für die anderen FHZ-Devices
Da kann ich jetzt nur raten das addLog mit regexp nicht klar kommt.

Ich verwende addLog z.B. so:
addLog("Keller_Gaestezimmer_Heizung","desired-temp");;addLog("EG_Eingang_Heizung","desired-temp")
und das sind nur 2 meiner 11 FHT.
Also kurz gesagt: Ich habe meine FHT ausgeschrieben und nicht mit regexp in der Definition.

Grüße

Edith: Grad gesehen. addLog scheint wohl doch mit regexp zurecht zu kommen  :o
Versuch mal ohne regexp ob du immer noch den Fehler hast sonst evtl. mal ein update anwerfen.
Edith2: Wobei im Log aber die FHZ.*-Meldungen fehlen und nur die FHT_Wintergarten erscheint.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

Hallo,

Ich bin mir nicht sicher ob addLog mit regexp klar kommt. Die in addLog aufgerufene Funktion ReadingsVal unterstützt nämlich keine regexp. Wenn du mit regexp arbeiten willst musst du addLog anpassen, so sollte es funktionieren:

sub
addLog($$) {
  my ($logdevice, $reading) = @_; # device and reading to be used
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice/) {
      my $logentry = ReadingsVal($l,$reading,"addLog: invalid reading");
      if ($reading =~ m,state,i) {
        fhem "trigger $logdevice $logentry   << addLog";
      } else {
        fhem "trigger $logdevice $reading: $logentry   << addLog";
      }
    }
  }
}


Grüße,

ChrisD

kwbo

@ Puschel74
ich bin deinem Rat gefolgt und habe die Langform eingesetzt. Jetzt habe ich alle Einträge korrekt in den Logs. Bei dem FHZ-Eintrag, den du vermisst hattest, hat es sich um einen Tippfehler gehandelt - sorry.

@ ChrisD
ich habe addLog mal entsprechend deinem Listing geändert und bekomme dann folgendes Ergebnis (für jedes FHZ entsprechend):

2013-11-15_20:11:40 WG_Tuer Window: Closed
2013-11-15_20:13:01 FHT_Wintergarten actuator: 100%   << addLog
2013-11-15_20:13:01 FHT_Wintergarten actuator: 0%   << addLog
2013-11-15_20:13:02 FHT_Wintergarten actuator: 0%   << addLog
2013-11-15_20:13:02 FHT_Wintergarten actuator: 2%   << addLog
2013-11-15_20:13:02 FHT_Wintergarten actuator: 0%   << addLog
2013-11-15_20:13:03 FHT_Wintergarten actuator: 64%   << addLog
2013-11-15_20:13:03 FHT_Wintergarten desired-temp: 23.0   << addLog
2013-11-15_20:13:04 FHT_Wintergarten desired-temp: 18.0   << addLog
2013-11-15_20:13:04 FHT_Wintergarten desired-temp: 19.0   << addLog
2013-11-15_20:13:04 FHT_Wintergarten desired-temp: 19.0   << addLog
2013-11-15_20:13:05 FHT_Wintergarten desired-temp: 14.0   << addLog
2013-11-15_20:13:05 FHT_Wintergarten desired-temp: 23.0   << addLog
2013-11-15_20:13:08 FHT_Wintergarten measured-temp: 21.9   << addLog
2013-11-15_20:13:08 FHT_Wintergarten measured-temp: 20.6   << addLog
2013-11-15_20:13:09 FHT_Wintergarten measured-temp: 20.3   << addLog
2013-11-15_20:13:09 FHT_Wintergarten measured-temp: 19.1   << addLog
2013-11-15_20:13:10 FHT_Wintergarten measured-temp: 18.0   << addLog
2013-11-15_20:13:10 FHT_Wintergarten measured-temp: 23.1   << addLog
2013-11-15_20:13:10 WG_Tuer Window: Closed   << addLog


Allem Anschein nach werden jetzt die Werte aller FHTs in alle Logfiles eingetragen.
Eigentlich sollten aber nur die Werte eines jeden FHTs in den zugehörigen Logfile eingetragen werden.
Das obige Listing ist nur von einem FHT-Logfile, enthält aber die Werte aller FHTs.
Wenn das nicht sehr aufwendig ist, wäre es nett, wenn du eine entsprechende Änderung noch einbauen könntest.
Ich traue mir dies leider nicht zu, versuche aber gerne durch den Unterschied die Routine zu verstehen.
Wenn aufwendig, kann ich aber auch mit der Version, die Puschel74 vorgeschlagen hat, ganz gut leben.

Euch beiden auf jeden Fall schon mal herzlichen Dank für eure Hilfe.

Gruß, Werner

ChrisD

Hallo,

Du hast Recht, in dem Code ist noch ein Fehler, so sollte es korrekt sein:

sub
addLog($$) {
  my ($logdevice, $reading) = @_; # device and reading to be used
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice/) {
      my $logentry = ReadingsVal($l,$reading,"addLog: invalid reading");
      if ($reading =~ m,state,i) {
        fhem "trigger $l $logentry   << addLog";
      } else {
        fhem "trigger $l $reading: $logentry   << addLog";
      }
    }
  }
}


Grüße,

ChrisD

kwbo

Hallo ChrisD,

nach der Korrektur sieht das Ganze sehr gut aus.
Vielen Dank für die Mühe.

Gruß, Werner

Puschel74

Hallo,

juhuuu - endlich kann ich meine addLog-Definition abspecken  ;D

Vielen Dank ChrisD.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

Hallo,

Ich möchte nur hinzufügen dass in der aktuellen Version regexp nur beim Device möglich ist, beim Attribut geht es (noch) nicht.

{addLog("FHT.*",".*temp")}

ist also nicht möglich.

Grüße,

ChrisD

Puschel74

#8
Hallo,

es macht mir aber bereits einen Unterschied ob ich 33 Einträge habe oder 3 (desired-temp, measured-temp und actuator).

Das (noch) von dir lässt mich (uns) aber hoffen das es bald auf 2 schrumpft  :D

Grüße

Edith: Ich habe addLog nun erstmal soweit umgestellt:
addLog {addLog(".*_Heizung","desired-temp");;addLog(".*_Heizung","measured-temp");;addLog(".*_Heizung","actuator")}
Ein
trigger addLog
hat mir das notify OG_Heizung_Bad_Auto getriggert  :o
Was hab ich den nun wieder falsch gemacht?
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

Hallo,

Ich glaube nicht dass du etwas falsch gemacht hast. Versuche die Zeile
if($l=~m/^$logdevice/) {
durch
if($l=~m/^$logdevice$/) {
zu ersetzen. Damit sollte deine regexp funktionieren.

Ich habe die Funktion erweitert, so dass auch regexps bei den Attributen möglich sind, allerdings möchte ich erst mal abwarten ob die obige Änderung den Fehler bei dir behebt.

Grüße,

ChrisD

Puschel74

Hallo,

if($l=~m/^$logdevice$/) {

eingefügt aber nach einem trigger addLog per sudo nano wieder zurück gebaut da FHEM abgeschmiert ist und nichtmehr starten wollte.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

#11
Hallo,

Ich sehe den Fehler im Moment nicht. Kannst du die Funktion
sub altest($$) {
  my ($logdevice, $reading) = @_; # device and reading to be used
  Log 0,"al: $logdevice, $reading";
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice$/) {
      Log 0,"al: $l";
    }
  }
}

hinzufügen, nach einem Reload mit
{altest(".*_Heizung","desired-temp");;altest(".*_Heizung","measured-temp");;altest(".*_Heizung","actuator")}
aufrufen und mir die Zeilen aus der FHEM-Logdatei die mit al: beginnen zuschicken zur Diagnose ?

Ich befürchte dass deine regexp auf ein anderes Objekt passt (z.B. Filelog) was dann mit der Fehlermeldung "addLog: invalid reading" getriggert wird wodurch es zum Absturz führt. In der erweiterten Version mit regexps für Attribute habe ich das Triggern mit der Fehlermeldung bereits abgeschaltet, stattdessen wird sie in die globale Logdatei geschrieben.

Grüße,

ChrisD

Edit: Hier eine angepasste Version, über einen zusätzlichen optionalen Parameter kann der Loglevel für die Meldung in der globalen Logdatei übergeben werden. Es wird nur noch getriggert wenn das Attribut auch existiert.

sub
addLog($$;$) {
  my ($logdevice, $reading,$ll) = @_; # device and reading to be used
  $ll=6 if(!defined($ll));
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice$/) {
      my $logentry = ReadingsVal($l,$reading,undef);
      if(defined($logentry)) {
        if ($reading =~ m,state,i) {
          fhem "trigger $l $logentry   << addLog";
        } else {
          fhem "trigger $l $reading: $logentry   << addLog";
        }
      } else {
        Log $ll,"addLog: invalid reading $l $reading";
      }
    }
  }
}


Puschel74

#12
Hallo,

Zitat2013.11.17 14:45:18 0: al: .*_Heizung, desired-temp
2013.11.17 14:45:18 0: al: DG_Bad_Heizung
2013.11.17 14:45:18 0: al: DG_Lern_Heizung
2013.11.17 14:45:18 0: al: DG_Schlaf_Heizung
2013.11.17 14:45:18 0: al: EG_Eingang_Heizung
2013.11.17 14:45:18 0: al: EG_Kueche_Heizung
2013.11.17 14:45:18 0: al: EG_WC_Heizung
2013.11.17 14:45:18 0: al: EG_Wohnzimmer_Heizung
2013.11.17 14:45:18 0: al: Keller_Gaestezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Badezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Schlafzimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Zimmer_Heizung
2013.11.17 14:45:18 0: al: .*_Heizung, measured-temp
2013.11.17 14:45:18 0: al: DG_Bad_Heizung
2013.11.17 14:45:18 0: al: DG_Lern_Heizung
2013.11.17 14:45:18 0: al: DG_Schlaf_Heizung
2013.11.17 14:45:18 0: al: EG_Eingang_Heizung
2013.11.17 14:45:18 0: al: EG_Kueche_Heizung
2013.11.17 14:45:18 0: al: EG_WC_Heizung
2013.11.17 14:45:18 0: al: EG_Wohnzimmer_Heizung
2013.11.17 14:45:18 0: al: Keller_Gaestezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Badezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Schlafzimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Zimmer_Heizung
2013.11.17 14:45:18 0: al: .*_Heizung, actuator
2013.11.17 14:45:18 0: al: DG_Bad_Heizung
2013.11.17 14:45:18 0: al: DG_Lern_Heizung
2013.11.17 14:45:18 0: al: DG_Schlaf_Heizung
2013.11.17 14:45:18 0: al: EG_Eingang_Heizung
2013.11.17 14:45:18 0: al: EG_Kueche_Heizung
2013.11.17 14:45:18 0: al: EG_WC_Heizung
2013.11.17 14:45:18 0: al: EG_Wohnzimmer_Heizung
2013.11.17 14:45:18 0: al: Keller_Gaestezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Badezimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Schlafzimmer_Heizung
2013.11.17 14:45:18 0: al: OG_Zimmer_Heizung

Etwas spät aber doch  8)

Grüße

Edith: Die angepasste Version löst kein Event mehr aus - perfekt. Danke dir.
Edith1: Zu früh gefreut  :(
addLog habe ich so in der Konfig:
addLog {addLog(".*_Heizung","desired-temp");;addLog(".*_Heizung","measured-temp");;addLog(".*_Heizung","actuator");;addLog("EG_.*","state");;
addLog("OG_.*","state");;addLog("DG_.*","state");;addLog("Keller_.*","state");;
addLog("WZ_.*","state");;(".*_Lader","state")}

nach einem trigger addLogerhalte ich im Logfile:
Zitat2013.11.17 18:42:12 3: FS20 set OG_Flur_Licht on-for-timer 5
2013.11.17 18:42:13 3: FS20 set OG_Zimmer_Ventilator on-for-timer 1920
2013.11.17 18:42:14 3: FS20 set OG_Badezimmer_Ventilator on-for-timer 1920
2013.11.17 18:42:17 3: FS20 set WZ_Deckenlicht off
2013.11.17 18:42:17 3: FS20 set WZ_Fernsehlicht off
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ChrisD

Danke für die Daten aus der Logdatei, ich habe aber leider den Fehler nicht finden können und sehe im Moment auch nicht wo er sein könnte.

Was die zusätzlichen FS20-Einträge betrifft, so ist mir nicht klar wo sie herkommen. Der Aufruf addLog("OG_.*","state") passt u.a. auf das Device OG_Flur_Licht, in addLog wird der aktuelle Zustand abgefragt (on-for-timer 5) und erneut getriggert. Die dabei verwendete Funktion 'trigger' sollte aber den Aktor nicht schalten und keinen Eintrag in die Logdatei einfügen.

Erhältst du auch einen Eintrag wenn du in der Kommandezeile von FHEM{addLog("OG_Flur_Licht","state")}eingibst ?

Hast du notifys auf den Geräten ?

In deiner Definition vom addLog fehlt im letzten Ausdruck ((".*_Lader","state")) ein addLog, dies sollte aber nicht der Grund für das merkwürdige Verhalten sein.

Grüße,

ChrisD

Puschel74

Hallo,

ZitatErhältst du auch einen Eintrag wenn du in der Kommandezeile von FHEM

Nein.
Wenn ich die state-Abfragen in addLog in der Langform verwende, also OG_Zimmer_Licht oder OG_Flur_Licht, dann werden die Stati mit addLog abgefragt aber das Device nicht getriggert.
Erst wenn ich OG_.* verwende werden im Obergeschoss die Geräte geschaltet.
Selbiges auch im Wohnzimmer (WZ_.*).

ZitatHast du notifys auf den Geräten ?
Die Geräte sind alle in notifys eingebaut.
Im Obergeschoss weiss ich auswendig das ich ein notify auf OG_Flur_Bewegungsmelder habe welches mir das das Licht im Flur mit on-for-timer einschaltet.
Ein weiteres notify reagiert auf einen S300TH (OG_Badezimmer) welcher mir bei überschreiten der Luftfeuchte die Ventilatoren (OG_Badezimmer_Ventilator und OG_Zimmer_Ventilator) mit einem on-for-timer einschaltet.

ZitatIn deiner Definition vom addLog fehlt im letzten Ausdruck ((".*_Lader","state")) ein addLog
Jep. Ist mir durch die Lappen gegangen.

Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.