PRESENCE: event-on-change-reading und notify

Begonnen von elbielefeld, 16 Mai 2013, 20:53:59

Vorheriges Thema - Nächstes Thema

elbielefeld

Hallo zusammen,

ich möchte Folgendes realisieren:
Wenn ich nach Hause komme, soll mein PC automatisch starten. Folgender Code sollte doch eigentlich funktionieren:


define DesktopEL WOL BC:AE:C5:76:10:E7 192.168.100.3
define ELDroid PRESENCE fritzbox ELdroid
attr ELDroid event-on-change-reading STATE
define HandyPresentPCAn notify ELDroid:present set DesktopEL on


Wenn ich die attr Zeile rausnehme, kommen alle 30 Sekunden WOL Pakete am PC an (Das heißt der PC wäre nie aus ;))
Wenn die attr Zeile drin ist, wird der present/absent Status des Handys korrekt geändert, es kommen jedoch gar kein WOL Paket mehr an.
Es sieht für mich so aus, als wenn der notify bei event-on-change-reading nicht startet.

Kann jemand helfen?

Danke, Eric

rudolfkoenig

> attr ELDroid event-on-change-reading STATE

STATE finde ich komisch, state wuerde ich eher verstehen. In solchen Faellen bitte mit inform/trigger experimentieren, wie es (auch) in http://fhem.de/HOWTO.html#at beschrieben ist.

elbielefeld

Danke für die Hilfe.

bei state passiert auch nichts. Als Events über Telnet bekomme ich:

PRESENCE ELDroid present
bzw.
PRESENCE ELDroid absent

habe es dann mit
attr ELDroid event-on-change-reading present,absent
probiert, jedoch wieder ohne Erfolg (Keine Events mehr). Wenn ich nen "trigger ELDroid present" abschicke, bekomme ich im Telnet und in der Logfile nen Eintrag, dass WOL abgeschickt wurde...es kommt aber nichts am PC an.

rudolfkoenig

>  attr ELDroid event-on-change-reading present,absent

Nicht STATE/present/absent sondern state. Oder im Klartext:

attr ELDroid event-on-change-reading state

elbielefeld

Wie gesagt: Habe ich probiert, es passiert nichts mehr. Keine Events über Telnet. Ich meine sogar bei state wurde nicht mal mehr der Status present/absent des Handys automatisch aktualisiert.

rudolfkoenig

Ich habe keine Idden mehr, und da ich presence nicht aufsetzen will, hoffe dass Markus noch was dazu sagen kann.
Habe die Diskussion verschoben, und umenannt.

justme1968

vielleicht hilft es kurz zusammen zu fassen was ich im hinblick auf state und die andere readings beim debuggen und implementieren des trigger patches für die userReadings bemerkt habe:

- state wird intern an diversen stellen anders behandelt als alle anderen readings
- es erzeugt z.b. kein event mit 'state:' sondern nur mit dem wert
- änderungen an state werden im web interface nicht live aktualisiert. alle anderen schon.
- ich habe probleme presence mit dblog zu verwenden (ich vermute es liegt an dem fehlenden doppelpunkt im event). mit filelog geht es besser.

ich denke es würde helfen wenn presence ein wirkliches reading 'presence' erzeugen würde und state nur noch auf den zeitpunkt der letzten änderung stehen lassen würde. dann hätte man beides auf einen blick.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Hallo zusammen,

es gab damals im Zuge der Einführung der reading-Funktionen (readingsUpdateBegin, readingsBulkUpdate, readingsEndUpdate,...) die Empfehlung, dass man nur das Reading "state" mit dem aktuellen Status befüllen sollte, da darauf weitere readingFn's aufsetzen.

Allerdings ist mir das Phänomen von andre bereits auch aufgefallen. In so einem Fall wird kein trigger für das Reading "state" gefeuert, sondern einfach nur schlicht der Status.

Ich hätte jetzt erwartet dass ein

attr ELDroid event-on-change-reading state

in diesem Fall dennoch funktionieren sollte.

@Rudi: kannst du zu dieser Konstellation etwas sagen, warum das so nicht funktioniert? Ich meine mich erinnern zu können, dass es so in einem Vorstellungsthread zu den ReadingsUpdate-Funktionen erklärt wurde.

Falls dem aber nicht so sein sollte werde ich natürlich ein zusätzliches Reading implementieren.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Ich habe gerade wg. dem neuen userReading Filter die Stelle angeschaut: eigentlich sollte es auch mit PRESENCE/state funktionieren. Mit einem dummy habe ich state getestet, ich habe aber nicht die Energie, PRESENCE wg. diesem Test aufzusetzen.

Zum weiteren debuggen empfehle ich die Zeile
   #Log 1, "EOCR:$eocr EOUR:$eour CHANGED:$changed";

in fhem.pl wieder zu aktivieren, und falls Ihr nicht weiterkommt, die Zeilen hier posten, zusammen mit einem Mitschnitt der inform timer.

Leider funktioniert "state" nicht (bzw. nicht einfach) wenn man es im neuen userReading Filter spezifizieren will, aber das ist eine ganz andere Baustelle.

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

elbielefeld

Ich bekenne mich schuldig. Habe etwas an der WOL.pm geändert, was den Fehler verursacht hat. Wusste zu der Zeit nicht, dass man die Module nach einer Änderung reloaden muss.
Der funktionierende Code:


define DesktopEL WOL BC:AE:C5:76:10:E7 192.168.100.2
define ELDroid PRESENCE fritzbox ELdroid
attr ELDroid event-on-change-reading state
define HandyPresentPCAn notify ELDroid:present set DesktopEL on


Habe jedoch einen richtigen Fehler in der WOL.pm gefunden. Mein PC wurde immer als off angezeigt. In der Abfrage


if (`ping -c 1 $ip` =~ m/100/)
  {
    $hash->{READINGS}{state}{VAL} = "off";
    $hash->{READINGS}{isRunning}{VAL} = "false";
  } else
  {
    $hash->{READINGS}{state}{VAL} = "on";
    $hash->{READINGS}{isRunning}{VAL} = "true";
  }


wird der Rückgabewert von Ping auf den Wert 100 überprüft (Für 100% packet loss). Blöd nur, wenn man ein 100er Netz hat. Habe die Zeile auf


if (`ping -c 1 $ip` =~ m/100%/)


geändert und es funktioniert. Wo / Wem sollte man solche Bugs melden?

Grüße, Eric

rudolfkoenig

Moment, ganz langsam. Ich halte fest:
- das im thread erwaehnte Problem ist keins, was sonst jemanden betreffen koennte.
- du hast ein Problem im Modul WOL.pm gefunden.

Wenn das stimmt, bitte kein thread-hijacking betreiben, und fuer die Fehlermeldung ein Neues eroeffnen.

Man erreicht damit hoffentlich den Autor/Maintainer des Moduls (siehe svn log fhem/FHEM/98_WOL.pm).

Die Wiki Seite mit den Zustaendigkeiten sollte erneuert werden, und am besten mit der Support-Gruppe in forum.fhem.de ergaenzt werden. Ist ein TODO, wenn es keiner uebernimmt, dann landet es auf meine Liste.

Petrosilius Zwackelmann

Hallo Zusammen,

ich kämpe derzeit auch mit einem "PRESENCE-notify"...

Dewegen die Frage:
Konnte das initiale Problem aus diesem Beitrag gelöst werden?

Gruß Manuel
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

elbielefeld

Hi Manuel,

es gab kein Problem. Das war nur Unwissenheit meinerseits. Was genau ist dein Problem?

Gruß, Eric

Petrosilius Zwackelmann

Ich verwende untenstehendes notify und bekomme es nicht zusammen dass dies nur bei PRESENCE state present durchlaufen wird.
Natürlich kann man das auch im weitern mit einer if Abfrage abfangen....



define SONYTV_ONLINE PRESENCE lan-ping 192.168.178.23
attr SONYTV_ONLINE event-on-change-reading state

geht nicht:
define n1_SONYTV_ONLINE notify SONYTV_ONLINE:present.* {\
......


geht:
define n1_SONYTV_ONLINE notify SONYTV_ONLINE.* {\
......
if ($TV eq "present") {\
......

Was mache ich hier falsch?
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony