[GELÖST] WOL notify/event nach fhem Neustart (wegen state none)

Begonnen von popy, 19 Januar 2019, 17:19:54

Vorheriges Thema - Nächstes Thema

popy

Hallo.

Ich habe mehrere WOLs die auf ein notify gehen.
Das notify hört nur auf einen state (on und ein anderes off).
Wenn ich jetzt "shutdown restart" mache dann werden diese immer ausgelöst -> was ich gerne lösen möchte.

Ich glaube dass Problem ist dass der state kurzzeitig nach dem start auf "none" steht und dann auf off/on geht (vermutlich nach dem ersten ping).
Das "attr WOL_WZ_NOTEBOOK event-on-change-reading state" war vorher auf ".*", aber auch mit "state" geht es nicht (Vermutlich wegem dem none state).
Habs schon mit "oldreadings state" versucht, aber die Werte sind immer gleich (Value() & OldValue()).

Würde mich über Denkanstöße freuen wie ich die notifys nach dem fhem rfestart verhindern kann?

Hier die defs:

Eins der WOLs:

defmod WOL_WZ_NOTEBOOK WOL XX:XX:XX:XX:XX:XX 192.168.0.XXX
attr WOL_WZ_NOTEBOOK alias Notebook
attr WOL_WZ_NOTEBOOK devStateIcon on:rc_TV1_on off:rc_TV refresh:rc_TV1_off
attr WOL_WZ_NOTEBOOK event-on-change-reading state
attr WOL_WZ_NOTEBOOK group Geräte
attr WOL_WZ_NOTEBOOK icon remotecontrol/black_btn_PC
attr WOL_WZ_NOTEBOOK interval 10
attr WOL_WZ_NOTEBOOK room Wohnzimmer

setstate WOL_WZ_NOTEBOOK on
setstate WOL_WZ_NOTEBOOK 2019-01-19 17:11:26 active off
setstate WOL_WZ_NOTEBOOK 2019-01-19 17:14:49 isRunning true
setstate WOL_WZ_NOTEBOOK 2019-01-19 17:11:26 packet_via_EW none
setstate WOL_WZ_NOTEBOOK 2019-01-19 17:11:26 packet_via_UDP none
setstate WOL_WZ_NOTEBOOK 2019-01-19 17:14:49 state on


Und das notify:


WOL_WZ.*:on.* {
my $hm = sprintf("%02d:%02d", $hour, $min);

Log 1, "act_on_PCs_WZ_ON: run! Tageslicht: ".Value("Tageslicht").", event: ".$EVENT;

if(Value("Tageslicht") eq "dunkel") {
  Log 1, "act_on_PCs_WZ_ON: Szene FernsehLicht aktivieren, es ist dunkel!";
  fhem "set WZ_Szenen scene Fernsehlicht";
}else{
  Log 1, "act_on_PCs_WZ_ON: Szene FernsehLicht NICHT aktivieren, es ist zu hell!";
}
}



Lösungen:

Lösung 1 - mit isRunning anstatt state: https://forum.fhem.de/index.php/topic,96150.msg895748.html#msg895748
Lösung 2 - "none" state unterdrücken: https://forum.fhem.de/index.php/topic,96150.msg924266.html#msg924266
Lösung/Workaround 3 - notifys deaktivieren für 30 Sekunden: https://forum.fhem.de/index.php/topic,96150.msg891920.html#msg891920

Ellert

- state wird aus dem Statefile wiederhergestellt, das müsset mit dem aktuellen Status gesichert werden.
- Den Regulären Ausdruck genauer formulieren in none steckt auch on.

RaspiLED

#2
Probier mal ^on statt on im notify,
Äh Quatsch on.* sollte nur on sein
Gruß Arnd


Gesendet von iPhone mit Tapatalk
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

popy

Zitat von: Ellert am 19 Januar 2019, 18:15:43
- state wird aus dem Statefile wiederhergestellt, das müsset mit dem aktuellen Status gesichert werden.
- Den Regulären Ausdruck genauer formulieren in none steckt auch on.

Zitat von: RaspiLED am 19 Januar 2019, 19:41:27
Probier mal ^on statt on im notify,
Äh Quatsch on.* sollte nur on sein
Gruß Arnd


Gesendet von iPhone mit Tapatalk

Habe nur "...:on" oder auch "...:^on" getestet.
Leider ohne erfolg. :on triggert wie gewünscht nur auf "on" und "^on" triggert gar nicht mehr auf on (weil es ja keinen Zeilen Anfang gibt).
Ich glaube noch immer das Problem ist dass der state am anfang none ist dann je nach Geräte Status auf on/off wechselt, was das eine Event triggert.
Sprich der letzte state wird nicht gespeichert!?

Wäre über weitere Tipps dankbar.

Danke
pOpY

popy

Update:
Habe im Code des Moduls nachgesehen und soweit ich das beurteilen kann wird der state nicht gespeichert?
SIehe letzte Zeile der WOL_Define funtkion:


sub WOL_Define($$) {
  my ($hash, $def) = @_;
  my @a = split("[ \t][ \t]*", $def);

  my $u = "wrong syntax: define <name> WOL <MAC_ADRESS> <IP> <mode> <repeat> ";
  return $u if(int(@a) < 4);
  my $name       = shift @a;
  my $type       = shift @a;
  my $mac        = shift @a;
  my $ip         = shift @a;
  my $mode       = shift @a;
  my $repeat     = shift @a;

  $repeat = "000"   if (!defined $repeat);
  $mode   = "BOTH"  if (!defined $mode);

  return "invalid MAC<$mac> - use HH:HH:HH:HH:HH"
     if(!($mac =~  m/^([0-9a-f]{2}([:-]|$)){6}$/i   ));

  return "invalid IP<$ip> - use ddd.ddd.ddd.ddd"
     if(!($ip =~  m/^([0-9]{1,3}([.-]|$)){4}$/i    ));

  return "invalid mode<$mode> - use EW|UDP|BOTH"
     if(!($mode =~  m/^(BOTH|EW|UDP)$/));

  return "invalid repeat<$repeat> - use 999"
     if(!($repeat =~  m/^[0-9]{1,3}$/i));

  $hash->{NAME}     = $name;
  $hash->{MAC}      = $mac;
  $hash->{IP}       = $ip;
  $hash->{REPEAT}   = $repeat;
  $hash->{MODE}     = $mode;

  delete $hash->{helper}{RUNNING_PID};

  readingsSingleUpdate($hash, "packet_via_EW",  "none",0);
  readingsSingleUpdate($hash, "packet_via_UDP", "none",0);
  readingsSingleUpdate($hash, "state",          "none",0);


@Dietmar63: Kannst du da Bitte mal drauf schauen, bin mir nicht sicher ob es an mir oder am Modul liegt  ;)

Danke
pOpY

popy

Update vom Update  :D
Habe jetzt einen dirty Workaround gemacht.
Dieser deaktiviert für 30 Sekunden beim Start die notifys:


global:INITIALIZED {
  Log 1, "act_on_FHEM_Initialized: FHEM is now ".$EVENT;
  my @devs = devspec2array("(act_on_PCs_.*)");
  foreach (@devs)
  {
  #FHEM wurde neu gestartet -> notifys für 30 Sekunden ignorieren da ansonsten durch das WOL ein fehlevent ausgelöst wird
  Log 1, "act_on_FHEM_Initialized: disable notify ".$_." for 30 Seconds";
fhem("set ".$_." inactive");
    fhem('define at_'.$_.'_Activate at +00:00:30 set '.$_.' active');
    fhem("set at_".$_."_Activate modifyTimeSpec 00:00:30");
  }
}


Ist nicht so schön, und wäre für jeden weiteren Tipp dankbar.

Danke
pOpY

KernSani

Da es ja so aussieht, als wäre tatsächlich das Modul mit Schuld, poste das mal im entsprechenden Forum, vielleicht kann man da ja was machen.


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

popy

Zitat von: KernSani am 20 Januar 2019, 20:14:58
Da es ja so aussieht, als wäre tatsächlich das Modul mit Schuld, poste das mal im entsprechenden Forum, vielleicht kann man da ja was machen.


Kurz, weil mobil

Sorry für die blöde Frage, was wäre das Richtige Forum?  ::)

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

popy

Zitat von: KernSani am 20 Januar 2019, 20:24:30
Steht hier drin: https://fhem.de/MAINTAINER.txt


Kurz, weil mobil

Danke, die File kannte ich noch nicht.
Kannst du den Thread dorthin Bitte verschieben?

Otto123

Zitat von: popy am 20 Januar 2019, 20:32:10
Danke, die File kannte ich noch nicht.
Kannst du den Thread dorthin Bitte verschieben?
Kannst Du selbst, unten links ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

popy

Erl. danke. Da habe ich ja noch einiges zu lernen...  ;)

Hoffe hier kann mir jemand helfen.
pOpY

popy


CoolTux

https://forum.fhem.de/index.php/topic,83149.msg753762.html#msg753762

Sofern Dietmar noch als Modulauthor in der Maintainer benannt ist wird sich hier jemand neues finden müssen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ich habe den von Dir geposteten Codeteil mir angeschaut. Der kann Dein Notify nicht triggern, da sie readingsSingleUpdate kein Event werfen. Es muss also was anderes sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net