invalid readings bei addLog

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

Vorheriges Thema - Nächstes Thema

ChrisD

Hallo,

Das Schalten der Aktoren kommt wahrscheinlich von den notifys. Zumindest beim Bewegungsmelder OG_Flur_Bewegungsmelder führt ein addLog("OG_.*","state") dazu dass der aktuelle Wert erneut getriggert wird und dadurch die notifys auch erneut ausgeführt werden. Wenn du {addLog("OG_Flur_Bewegungsmelder","state")} eingibst sollte dies auch zum Schalten des Aktors führen.

Eine Möglichkeit dies zu verhindern ist das notify so anzupassen dass es nichts macht wenn der Text '<< addLog' im Event enthalten ist. Wenn dein notify so aussieht:define n_OG_Flur_Licht notify OG_Flur_Bewegungsmelder:on.* set OG_Flur_Licht on-for-timer 5 sollte dies funktionieren:define n_OG_Flur_Licht notify OG_Flur_Bewegungsmelder:on.*(?<!addLog) set OG_Flur_Licht on-for-timer 5

Kannst du die Definition des notifys auf OG_Flur_Bewegungsmelder posten ?

Grüße,

ChrisD

Puschel74

#16
Hallo,

ZitatKannst du die Definition des notifys auf OG_Flur_Bewegungsmelder posten ?

Bitteschön:

define OG_Flur_Licht notify OG_Bewegungsmelder_Flur_Bad:on.* {

Ich werd mal deinen Vorschlag ausprobieren.
Danke schonmal für die Hilfe.

Grüße

Edith: Mal 2 Screenshots dabei - erklären wäre etwas schwierig.
Erster Screenshot ist das (beinahe) komplette notify mit Code und am zweiten Screenshot was in FHEM nach einfügen von (?<!addLog) übrig bleibt.
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,

Das Ganze ist nur ein kosmetisches Problem, wenn du auf DEF klickst wird der Code korrekt angezeigt. Das Problem tritt generell beim Verwenden von '<' (und diversen anderen Zeichen) auf da es im HTML-Code nicht durch &lt; ersetzt wird. Für den Browser ist es somit ein HTML-Tag welches mit <addLog beginnt. Das Anzeigeergebnis ist wahrscheinlich abhängig vom Browser.

Für die korrekte Darstellung muss 01_FHEMWEB geändert werden. In der Version 4251 ist es in Zeile 1923:
  FW_pO   "<div class=\"dval\" id=\"disp\">$eval</div>";

müsste in
  FW_pO   "<div class=\"dval\" id=\"disp\">".FW_htmlEscape($eval)."</div>";

geändert werden. Da ich aber nicht weiß ob diese keine anderen Nebenwirkungen hat solltest du dies besser mit dem Entwickler abklären.

Grüße,

ChrisD



Puschel74

Hallo,

sorry für die etwas späte Rückmeldung aber

ZitatWenn du

{addLog("OG_Flur_Bewegungsmelder","state")}

eingibst sollte dies auch zum Schalten des Aktors führen.

So habe ich das für alle Device im addLog definiert (also die Langform) und das notify wird eben nicht getriggert.
Ok. Nur bei dem einen hab ich es nicht versucht aber bis auf die Heizung hab ich momentan noch alle "state"-Abfragen in Langform definiert da ja eben die notify "zünden" wenn ich ein trigger addLogabschicke.

Ich habe vorhin mal deinen Vorschlag "durchgezogen" und bei einem notify (?<!addLog)eingetragen.

Das notify sah dann so aus:
define OG_Flur_on notify OG_Flur_Bewegungsmelder:on.*(?<!addLog) {
und nach Eingabe von trigger addLoghabe ich das vorgefunden (siehe Screenshot).

addLog ist zu diesme Zeitpunkt so angelegt gewesen:
addLog {addLog(".*_Heizung","desired-temp");;addLog(".*_Heizung","measured-temp");;addLog(".*_Heizung","actuator");;addLog("EG_.*","state");;addLog("OG_.*","state");;addLog("DG_.*","state");;addLog("WZ_.*","state");;addLog(".*_Lader","state");;addLog("Ladestation_.*","state")}

Nun bin ich grad meinen Versuchs RasPi am umschreiben und ein paar notify am erstellen die auf einen Dummy "lauschen" um dann zu schauen was passiert.

Wenn noch Ideen rumschwirren dann bitte nur her damit.

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 habe mir den Code noch einmal genauer angesehen, kann aber den Grund für das von dir beobachtete Verhalten nicht finden.

Der Zusatz (?<!addLog) ist Bestandteil der Regexp und führt dazu dass das notify nicht ausgeführt wird wenn im Event der Text addLog enthalten ist. Wie der Text in den state vom S300TH gelangt ist weiß ich nicht.

Kannst du die Funktion altest durch diese ersetzen:
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$/) {
      my $logentry = ReadingsVal($l,$reading,undef);
      Log 0,"al: $l - ".defined($logentry)." - $defs{$l}{TYPE}";
    }
  }
}


und die Ausgabe des Aufrufes
{altest("OG_.*","state")} aus der FHEM-Logdatei posten ?

Grüße,

ChrisD


Puschel74

Hallo,

und mal wieder sorry für der späte Rückmeldung.
Unter der Woche hab ich selten bis keine Zeit um an meiner Installation zu "schrauben".

Anbei der Logauswurf:
Zitat2013.12.06 22:41:58 0: al: OG_.*, state
2013.12.06 22:41:58 0: al: OG_Bad_hum - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Bad_hum_last - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Badezimmer - 1 - CUL_WS
2013.12.06 22:41:58 0: al: OG_Badezimmer_Fenster -  - CUL_FHTTK
2013.12.06 22:41:58 0: al: OG_Badezimmer_Heizung - 1 - FHT
2013.12.06 22:41:58 0: al: OG_Badezimmer_Heizung_Ventil -  - notify
2013.12.06 22:41:58 0: al: OG_Badezimmer_Tuer -  - CUL_FHTTK
2013.12.06 22:41:58 0: al: OG_Badezimmer_Ventil - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Badezimmer_Ventilator - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Badezimmer_Ventilator_automatisch -  - notify
2013.12.06 22:41:58 0: al: OG_Bewegungsmelder_Flur_Bad - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Flur_Licht - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Flur_on -  - notify
2013.12.06 22:41:58 0: al: OG_Gang_Dunkel - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Gang_Hell -  - FS20
2013.12.06 22:41:58 0: al: OG_Gang_Hell_Dunkel_Pruef -  - notify
2013.12.06 22:41:58 0: al: OG_Heizung_Bad - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Heizung_Bad_An -  - notify
2013.12.06 22:41:58 0: al: OG_Heizung_Bad_Auto -  - notify
2013.12.06 22:41:58 0: al: OG_Heizung_Bad_Auto_An -  - at
2013.12.06 22:41:58 0: al: OG_Heizung_Bad_onoff -  - notify
2013.12.06 22:41:58 0: al: OG_Licht_Gang - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Schlaf_Charly - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Schlaf_Licht - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Schlaf_Roli - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Schlafzimmer - 1 - CUL_WS
2013.12.06 22:41:58 0: al: OG_Schlafzimmer_Fenster -  - CUL_FHTTK
2013.12.06 22:41:58 0: al: OG_Schlafzimmer_Heizung - 1 - FHT
2013.12.06 22:41:58 0: al: OG_Schlafzimmer_Heizung_Ventil -  - notify
2013.12.06 22:41:58 0: al: OG_Schlafzimmer_Tuer -  - CUL_FHTTK
2013.12.06 22:41:58 0: al: OG_Schlafzimmer_Ventil - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Ventilator_Aus -  - FS20
2013.12.06 22:41:58 0: al: OG_Ventilator_Ein - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Ventilatoren_off -  - notify
2013.12.06 22:41:58 0: al: OG_Ventilatoren_on -  - notify
2013.12.06 22:41:58 0: al: OG_ZimmerHeizung_addLog -  - at
2013.12.06 22:41:58 0: al: OG_Zimmer_Fenster -  - CUL_FHTTK
2013.12.06 22:41:58 0: al: OG_Zimmer_Heizung - 1 - FHT
2013.12.06 22:41:58 0: al: OG_Zimmer_Heizung_Ventil -  - notify
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo_50 -  - notify
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo_75 -  - notify
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo_Ab -  - notify
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo_Auf -  - notify
2013.12.06 22:41:58 0: al: OG_Zimmer_Rollo_Taster -  - FS20
2013.12.06 22:41:58 0: al: OG_Zimmer_Ventil - 1 - dummy
2013.12.06 22:41:58 0: al: OG_Zimmer_Ventilator - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Zimmer_Ventilator_Zeit - 1 - FS20
2013.12.06 22:41:58 0: al: OG_Zimmer_Ventilator_on -  - notify

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,

Danke für die Daten. Ich befürchte dass es keine einfache Lösung für das Problem gibt. Die Regexp OG_.*,state triggert wahrscheinlich diverse Notifys welche dann die von dir beobachteten Schaltvorgänge auslösen. Folgende Geräte werden bei OG_.* getriggert:
ZitatOG_Bad_hum
OG_Bad_hum_last
OG_Badezimmer
OG_Badezimmer_Heizung
OG_Badezimmer_Ventil
OG_Badezimmer_Ventilator
OG_Bewegungsmelder_Flur_Bad
OG_Flur_Licht
OG_Gang_Dunkel
OG_Heizung_Bad
OG_Licht_Gang
OG_Schlaf_Charly
OG_Schlaf_Licht
OG_Schlaf_Roli
OG_Schlafzimmer
OG_Schlafzimmer_Heizung
OG_Schlafzimmer_Ventil
OG_Ventilator_Ein
OG_Zimmer_Heizung
OG_Zimmer_Rollo
OG_Zimmer_Ventil
OG_Zimmer_Ventilator
OG_Zimmer_Ventilator_Zeit
Rufst du im Moment für jedes dieser Geräte addLog (mit state) einzeln auf ?

Eine Möglichkeit wäre beim Aufruf der addLog-Funktion sämtliche Notifys zu deaktivieren, die Trigger abzusetzen und die Notifys wieder zu aktivieren. Nachteil ist hierbei dass Events die während der Ausführung der Funktion eintreffen keine Notifys auslösen da diese abgeschaltet sind.

Ein weitere Möglichkeit wäre die Geräte bei denen ein addLog gewünscht ist zu markieren, z.B. durch einen Eintrag im Kommentarfeld. So könnte die Regexp weiterhin benutzt werden, allerdings würden nur die Geräte getriggert bei denen zusätzlich eine Markierung vorhanden ist.

Grüße,

ChrisD

Puschel74

Hallo,

ZitatRufst du im Moment für jedes dieser Geräte addLog (mit state) einzeln auf ?
Ja. Momentan sieht mein addLog so aus:
addLog {addLog(".*_Heizung","desired-temp");;addLog(".*_Heizung","measured-temp");;addLog(".*_Heizung","actuator");;addLog("EG_Eingang_Licht_innen","state");;addLog("OG_Badezimmer_Ventilator","state");;addLog("OG_Flur_Licht","state");;addLog("OG_Zimmer_Ventilator","state");;addLog("OG_Bewegungsmelder_Flur_Bad","state");;addLog("Ladestation_GZ","state");;addLog("Ladestation_Bar","state");;addLog("EG_Eingang_Bewegungsmelder","state");;addLog("EG_Vorraum_Licht","state");;addLog("Laptop_Lader","state");;addLog("Tablet_Lader","state");;addLog("WZ_Deckenlicht","state");;addLog("WZ_Fensterbeleuchtung","state");;addLog("WZ_Fernsehlicht","state");;addLog("DG_Bad_LED","state");;addLog("DG_Bad_Licht","state");;addLog("DG_Bad_Schmink","state");;addLog("DG_Bad_Ventilator","state");;addLog("DG_Lern_Licht","state");;addLog("DG_Schlaf_Halogen","state");;addLog("DG_Schlaf_LED","state");;addLog("DG_Schlaf_Licht","state");;addLog("DG_Schlaf_Ventilator","state")}

Und hier werden die notify eben nicht getriggert daher ging ich davon aus das es auch mit dem regexp klappen sollte und war etwas irritiert das im Badezimmer der Ventilator losgelaufen ist und das Licht angegangen ist.
Eigenartigerweise habe ich auch notifys auf die FHT-Ventilstellung (actuator) und diese triggern aber anscheinend auch nicht  :o

Danke schonmal für deine Geduld  ;D

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,

Hier kommt eine weitere Version die zuerst alle Notifys abschaltet bevor getriggert wird. Meine Aussage im vorherigen Beitrag
ZitatNachteil ist hierbei dass Events die während der Ausführung der Funktion eintreffen keine Notifys auslösen da diese abgeschaltet sind.
ist falsch, zumindest solange wie alles in einem Thread abläuft.

Ich habe die Funktion umbenannt um sie in Ruhe testen zu können:
sub
addLogN($$;$) {
  my ($logdevice, $reading,$ll) = @_; # device and reading to be used
  $ll=6 if(!defined($ll));

  my @no=devspec2array("TYPE=notify");
  foreach(@no) {
    my $da=AttrVal($_,"disable",-1);
    if ($da<=0) {
      $attr{$_}{disable}=1;
      $defs{$_}->{addLog}=$da;
    }
  }
 
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice$/) {
      my $logentry = ReadingsVal($l,$reading,undef);
      if(defined($logentry)) {
        if ($reading =~ m,state,i) {
          Log $ll,"addLog: trigger $l $logentry   << addLog";
          fhem "trigger $l $logentry   << addLog";
        } else {
          Log $ll,"addLog: trigger $l $reading: $logentry   << addLog";
          fhem "trigger $l $reading: $logentry   << addLog";
        }
      } else {
        Log $ll,"addLog: invalid reading $l $reading";
      }
    }
  }
  @no=devspec2array("TYPE=notify");
  foreach(@no) {
    if(defined($defs{$_}->{addLog})) {
      if($defs{$_}->{addLog}==-1) {
        delete($attr{$_}{disable});
      } else {
        $attr{$_}{disable}=0;
      }
      delete($defs{$_}->{addLog});
    }
  }
}
Zum Testen kannst du{addLogN("OG_.*","state")}verwenden. Dabei sollten keine Events mehr ausgelöst werden.

Grüße,

ChrisD


Puschel74

Hallo,

die notifys "zünden" nicht mehr aber ...
siehe Screenshot

Mit dem nächsten übermitteln der Werte ist dann wieder alles normal.
siehe 2. Screenshot und 3. Screenshot

So wie ich gesehen habe sind aber nur die CUL_WS betroffen.
Ich starte nochmal einen Test mit den CUL_WS im Keller.

Danke nochmal für Deine Hilfe.

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,

Bei meinen CUL_WS tritt der Effekt nicht auf, verwendest du bei den CUL_WS die Attribute stateFormat oder eventMap ? Wenn ja kannst du die Definition davon posten ?

Grüße,

ChrisD

Puschel74

Hallo,

eventMap bei einem CUL_WS?
Nein.
Eigentlich verwende ich nur event-on-change-reading - siehe Screenshot.

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,

Kannst du diese Version ausprobieren:

sub
addLogN($$;$) {
  my ($logdevice, $reading,$ll) = @_; # device and reading to be used
  $ll=6 if(!defined($ll));

  my @no=devspec2array("TYPE=notify");
  foreach(@no) {
    my $da=AttrVal($_,"disable",-1);
    if ($da<=0) {
      $attr{$_}{disable}=1;
      $defs{$_}->{addLog}=$da;
    }
  }
 
  foreach my $l (sort keys %defs) {
    if($l=~m/^$logdevice$/) {
      my $logentry = ReadingsVal($l,$reading,undef);
      if(defined($logentry)) {
        if ($reading =~ m,state,i) {
          Log $ll,"addLog: trigger $l $logentry   << addLog";
          fhem "trigger $l $logentry";
        } else {
          Log $ll,"addLog: trigger $l $reading: $logentry   << addLog";
          fhem "trigger $l $reading: $logentry   << addLog";
        }
      } else {
        Log $ll,"addLog: invalid reading $l $reading";
      }
    }
  }
  @no=devspec2array("TYPE=notify");
  foreach(@no) {
    if(defined($defs{$_}->{addLog})) {
      if($defs{$_}->{addLog}==-1) {
        delete($attr{$_}{disable});
      } else {
        $attr{$_}{disable}=0;
      }
      delete($defs{$_}->{addLog});
    }
  }
}


Sie hängt den Zusatz '<< addLog' nicht an wenn 'state' getriggert wird.

Grüße,

ChrisD

Icebear

Hallo,

auch wenn hier lang nichts mehr passiert ist.
Wäre es möglich, addlog den devicetyp beizubiegen ? (zb. TYPE=FHT)?
So wie ich das sehe, benutzen die meisten Addlog doch um zb. bei FHTs die desired-temp zu loggen oder ähnliches ...

Liebe grüsse aus Dinslaken
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

ChrisD

Hallo,

Eine Version von addLog mit Device-Typ könnte so aussehen:

sub
addLogD2A($$) {
  my ($devspec, $reading) = @_; # device and reading to be used

  my @no=devspec2array($devspec);
  foreach my $l (@no) {
    if(defined($defs{$l})) {
      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";
      }
    }
  }
}


Aufrufen kannst du sie z.B. mit
{addLog("TYPE=FHT","measured-temp")}

Grüße,

ChrisD