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
> 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 (//fhem.de/HOWTO.html#at) beschrieben ist.
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.
> attr ELDroid event-on-change-reading present,absent
Nicht STATE/present/absent sondern state. Oder im Klartext:
attr ELDroid event-on-change-reading state
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.
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.
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
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
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.
@andre: Könntest du das übernehmen?
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
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.
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
Hi Manuel,
es gab kein Problem. Das war nur Unwissenheit meinerseits. Was genau ist dein Problem?
Gruß, Eric
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?
Das notify wird definiert als
DEVICE:Regular Expression für Event
Du überprüfst also das Device SONYTV_ONLINE auf das Event "present.*", also der Text "present", dann ein beliebiges Zeichen (.) und dann beliebig viele beliebige Zeichen (*) ;)
Das Event von presence lautet in dem Fall aber nur "present". In sofern sollte
define n1_SONYTV_ONLINE notify SONYTV_ONLINE:present {\
funktionieren.
Gruß Eric
Hallo Eric,
getestet und .... geht ... danke!
Bisher bin ich davon ausgegangen dass .* nie schaden kann und oft hilft.
Begründung:
Der * im regex bedeutet :
Wiederholung des letzten Zeichens (einschließlich keinmal, das Zeichen braucht also gar nicht vorhanden zu sein)
Gruß Manuel
Stimmt, du hast Recht.
Jetzt versteh ichs auch nicht mehr ;)
Der Punkt besagt aber, dass es mindestens noch ein Zeichen nach dem t von present geben muss, das sich dann keinmal oder mehrfach wiederholt.
presen.* sollte also genauso funktionieren wie present* (wenn denn irgendjemand wirklich das Sternchen gerne sehen möchte)