Statusabfrage Fernseher über WOL wird geblockt.

Begonnen von breznsoizer, 18 April 2020, 08:25:14

Vorheriges Thema - Nächstes Thema

breznsoizer

Hallo zusammen,
meinen älteren Fernseher kann ich über irblaster fernsteuern. Darüber kann ich ihn auch über die Powertaste an und ausschalten.. Jetzt möchte ich ihn gerne abends über ein "gute Nacht skript" gemeinsam mit ein paar Lampen ausschalten. Dazu muss ich aber wissen ob der Fernseher überhaupt läuft. Dies Frage ich über wol ab. Allerdings will ich nicht das rund um die Uhr ping-Abfragen laufen, sondern möchte diese gerne über das "Gute Nacht Skript" über "Set TV refresh" nur bei Bedarf tun. Dies funktioniert leider nicht immer, da ziemlich oft die Abfrage von Blocking.pm geblockt wird.
Wie kann ich die Blockingfunktion für wol deaktivieren? Ich würde wol ja nur für die Abfrage in dem Skript benutzen, ansonsten gar nicht.
Gibt es einen anderen/eleganteren Weg mein Vorhaben umzusetzen?

  sub GuteNacht () {{fhem ("set Hochzeitsbild off; set TV refresh; sleep 5")}; if (Value ("TV") eq "on"){fhem ("set irblaster tvon; sleep 120;  set Wandleuchte off") }} 

Hier das Logfile:
  20.04.17 22:28:40 3: [TV] set TV refresh
2020.04.17 22:28:45 3: SIGNALduino IT_set: Hochzeitsbild off
2020.04.17 22:28:45 3: MQTT2_DEVICE set Wohnzimmerschrank_LEDs off
2020.04.17 22:28:45 1: Timeout for WOL_Ping reached, terminated process 13283
2020.04.17 22:28:45 3: BlockingCall for TV was aborted   




KölnSolar

Willkommen bei FHEM.

Deine Interpretation ist nicht richtig.

Zitat2020.04.17 22:28:45 3: BlockingCall for TV was aborted
heißt, dass ein Parallelprozess "gestorben" ist. TV ist Dein WOL-Device ? Wenn Du dort verbose=5 setzt, verrät dir das Log wahrscheinlich mehr zum Abbruch.

Have fun
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

breznsoizer

Danke für die Willkommensgrüße!
Ja, TV ist das WOL Device.
Nach der Umstellung auf Verbose=5 bekomme ich folgendes Ergebnis:

2020.04.18 09:50:15 3: [TV] set TV refresh
2020.04.18 09:50:15 3: MQTT2_DEVICE set irblaster tvon
2020.04.18 09:50:15 4: [TV] executing: ping -c 1 -w 2 192.168.178.28
2020.04.18 09:50:15 4: [TV] result executing ping: PING 192.168.178.28 (192.168.178.28) 56(84) bytes of data.
64 bytes from 192.168.178.28: icmp_seq=1 ttl=64 time=97.2 ms

--- 192.168.178.28 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 97.225/97.225/97.225/0.000 ms

2020.04.18 09:50:15 4: [TV] ping succesful - state = on
2020.04.18 09:50:25 3: SIGNALduino IT_set: Hochzeitsbild off
2020.04.18 09:50:25 3: MQTT2_DEVICE set Wohnzimmerschrank_LEDs off


D.h. die WOL Abfrage funktioniert. Ich glaube, das die Pause die ich zwischen der Abfrage und der IF-Schleife eingebaut habe ignoriert wird und desegen in der IF-Schleife noch der falsche Status ausgelesen wird.
Ist die Interpretation richtig? Wie kann ich das ändern?

KernSani

Wenn du nur den Anwesenheitsstatus des TVs checken willst, würde ich PRESENCE statt WOL verwenden. Und dann würde ich mir keine Sorgen wegen ein paar Pings machen, sondern das Ding durchlaufen lassen.


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

frank

ich denke, das sleep im fhem() cmd blockiert fhem, da kein weiterer befehl folgt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

KölnSolar

ZitatNote: a sleep not followed by any command will block FHEM, is deprecated, and it issues a WARNING in the FHEM log.

ZitatGibt es einen anderen/eleganteren Weg mein Vorhaben umzusetzen?
Anstatt alles in einem Schritt mit sleep zu machen, das if in ein notify mit regexp auf das  WOL-event packen ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

breznsoizer

Vielen Dank für die ganzen Rückmeldungen. Das Problem mit dem sleep habe ich hinbekommen, indem ich nach dem sleep Befehl noch eine Lampe ausgeschaltet habe. Dennoch blieb beim Testen das Problem, dass teilweise der WOL Refresh über das Skript nicht funktioniere.
020.04.18 09:36:38 1: Timeout for WOL_Ping reached, terminated process 20364
2020.04.18 09:36:38 3: BlockingCall for TV was aborted

Komischerweise wurde jedesmal der Status richtig erkennt, wenn ich im WOL set TV refresh gedrückt habe.

Wie dem auch sei, ich habe nun auf presence umgestellt. Damit funktioniert das Skript tadellos. Klar, jetzt habe ich alle 30s die Statusabfrage die ich eigentlich nicht haben wollte. Dafür wird der Status vom Fernseher jedesmal richtig erkannt.

Auf ein notify auf WOL wollte ich nicht gehen, da ich hier unterschiedliche Fälle brauche. Ich will ja auch den Fernseher einschalten können und nicht nur ausschalten. Zumindestens ist mir auf anhieb kein einfacher Weg eingefallen, dass mit notify zu machen.

Otto123

Das stimmt nicht, auch WOL macht die Status Abfrage per Ping.
Das mit dem Blocking Call Abbruch kannst Du auch beim Presence Device bekommen.

Zeig mal bitte ein list TV.

Gruß Otto
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

breznsoizer

#8
Ja richtig erklären konnte ich mir auch nicht, dass mit presence das Blocken bisher nicht passiert ist. Allerdings habe ich es ja auch erst heute umgestellt.
Hier das List TV
Internals: DEF 0c:89:10:9c:d9:54 192.168.178.28
FUUID 5e921072-f33f-2b39-19c9-d87ea3878dea2495
IP 192.168.178.28
MAC 0c:89:10:9c:d9:54
MODE BOTH
NAME TV
NR 144
REPEAT 000
STATE none
TYPE WOL VERSION 1.03
READINGS:
2020-04-18 12:17:18 active off
2020-04-18 09:56:03 isRunning false
2020-04-18 12:17:18 packet_via_EW none
2020-04-18 12:17:18 packet_via_UDP none
2020-04-18 12:17:18 state none helper: Attributes: interval 0 room Wohnzimmer
verbose 5

Otto123

Die schlechte Nachricht:
Ich habe diese beiden Einträge auch ab und an. Man könnte einfach attr TV verbose 0 dagegen setzen.

Zur Verwendung: Wenn Du den TV nicht mit WOL ein- oder ausschaltest sondern nur Presence willst, ist Presence natürlich sinnvoller.

Zum WOL Modul:
MODE BOTH - ich "liebe" diese sinnlose Standard Einstellung.
Deswegen verwende ich es immer anders:
DEF 0c:89:10:9c:d9:54 192.168.178.28 UDP - damit wird nur eine Methode verwendet und man braucht ether-wake nicht zu installieren.
Dazu noch attr TV useUdpBroadcast 192.168.178.255 damit kann man auch Geräte in anderen Subnetzen aufwecken.

Zum Presence Modul: Ich glaube der Markus hat da voriges Jahr einiges gemacht, vielleicht sind die Logeinträge wirklich weg? :)

Gruß Otto
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

kadettilac89

Die Fehlermeldung ist weg wenn du die aktuelle, noch nicht eingecheckte Version nutzt. Schau mal hier ...

https://forum.fhem.de/index.php/topic,97064.msg1011962.html#msg1011962

Kannst ja mal testen.