FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hyper2910 am 29 April 2015, 00:09:10

Titel: doif und State Dummy abfrage
Beitrag von: hyper2910 am 29 April 2015, 00:09:10
Hallo

Vielleicht könnt ihr mir nochmal helfen.

Ich habe einen Dummy welcher seinen State nummerisch ändert,  wenn dieser auf 1 geht, soll ein doif einen Befehl ausführen,  jedoch komme ich da nicht weiter, wenn der State on, off oder ähnliches ist kein Problem nur bei zahlen funktioniert es nicht.   Hier mein def dazudefine gelb_message DOIF ([GelberSack:.1]) (set Nachricht message gelber Sack muss raus!, set Nachricht_Anja message gelber Sack muss raus!)
Titel: Antw:doif und State Dummy abfrage
Beitrag von: der-Lolo am 29 April 2015, 06:24:56
Ähm, du verwendest doch gar keine bedingung...
Bei zahlen braucht du glaube ich jedenfalls die Mathematischen vergleiche <>=, vielleicht wirfst du ausserdem mal einen blick in die comandref und verwendest das ganze etwa so...
DOIF ([GelberSack:d] > 0) (set....
Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 29 April 2015, 06:40:55
Hi,

Das hatte ich ausprobier,  und bekomme immer diese Meldung


gelb_message DOIF: expected DOELSEIF or DOELSE: <1 (set Nachricht message gelber Sack muss raus!, set Nachricht_Anja message gelber Sack muss raus!)
Titel: Antw:doif und State Dummy abfrage
Beitrag von: der-Lolo am 29 April 2015, 07:40:01
Vielleicht musst Du ein DOELSE anlegen damit immer eine aussage zutreffen kann.
Ich mache das bei DOIF übrigens immer um zustände abzufangen die in den DOELSEIF zweigen nicht abgefangen werden..
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Pfriemler am 29 April 2015, 08:54:48
DOELSEIF und DOELSE sind eigentlich optional.
Funktioniert ... DOIF ([GelberSack] eq "1") ... ?

Vom 7Zöller via Tapatalk

Titel: Antw:doif und State Dummy abfrage
Beitrag von: Pfriemler am 29 April 2015, 08:58:02
und das DOIF benötigt ohne weitere Branches ein do always, sonst funzt es nur genau ein Mal.

Vom 7Zöller via Tapatalk

Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 30 April 2015, 10:02:20
danke für die Hilfe,

das klappt soweit alles.


Ich habe noch eine Frage zu den States.

Ich habe eine Reihe von Geräten, welche battery:low oder OK melden.  muss ich für eine Aktion jetzt für jedes Device einen DOIF anlegen oder geht das auch über mehrere Device

so funktioniert es.
define BatteriewarnungNotifyWZ1 DOIF ([Wohnzimmer:battery] eq "low") (set Nachricht message LowBatterie Wohnzimmer Wandthermostat)

und soetwas würde ich gerne machen, jedoch bekomme ich eine Errormessage

define BatteriewarnungNotify DOIF ([*:battery] eq "low") (set Nachricht message LowBatterie)

Eroor:

timer_1_c1

error: Wrong timespec *:battery: either HH:MM:SS or {perlcode}
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Pfriemler am 30 April 2015, 14:04:39
Einer der (wenigen) Nachteile von DOIF ist, dass reguläre Ausdrücke im Trigger nicht unterstützt werden. Das ist bei der Vielzahl der erlaubten Syntax-Fälle aber auch absolut verzeihlich.
DOIF hält das halt für eine (ungültige) Uhrzeit, wohl weil der Teil vor dem : keinem konkreten Device zuzuordnen ist.

Hier bist du mit einem Notify wirklich besser aufgehoben.
Aus dem Handgelenk:
define myBatteryChecker notify .*:[Bb]attery:.* { if("%" !~ m/ok/) {fhem("set Nachricht message Schwache Batterie im Gerät $NAME"} }

Ungetestet.
Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 30 April 2015, 15:42:59
super danke für die Erklärung, es fehlte im String eine Klammer noch! und warum muss dort ein ok stehen und kein "low"?



.*:[Bb]attery:.* { if("%" !~ m/ok/) {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")} }
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Pfriemler am 30 April 2015, 16:16:07
Ja, Klammer hatte ich vergessen, stimmt.

Zitat von: hyper2910 am 30 April 2015, 15:42:59
super danke für die Erklärung, es fehlte im String eine Klammer noch! und warum muss dort ein ok stehen und kein "low"?

So wie ich in den letzten vier Tagen Regex gelernt habe, reagiert das Regex auf alles, was mit "battery" oder "Battery" zu tun hat und NICHT ("!~") ok meldet.
Den Code hatte ich sonst auch nur gerade ausm Forum geklaut. Wenn alle Geräte brav "low" melden würden, müsste auch
.*:[Bb]attery:.low.* {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")}

reichen.
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Damian am 30 April 2015, 16:29:22
Zitat von: Pfriemler am 30 April 2015, 14:04:39
Einer der (wenigen) Nachteile von DOIF ist, dass reguläre Ausdrücke im Trigger nicht unterstützt werden. Das ist bei der Vielzahl der erlaubten Syntax-Fälle aber auch absolut verzeihlich.
DOIF hält das halt für eine (ungültige) Uhrzeit, wohl weil der Teil vor dem : keinem konkreten Device zuzuordnen ist.

Hier bist du mit einem Notify wirklich besser aufgehoben.
Aus dem Handgelenk:
define myBatteryChecker notify .*:[Bb]attery:.* { if("%" !~ m/ok/) {fhem("set Nachricht message Schwache Batterie im Gerät $NAME"} }

Ungetestet.

DOIF kann sehr wohl mit Regexp umgehen, allerdings nur im Event selbst, aber nicht im Device-Namen. Das kann es bei DOIF auch nicht geben, denn eine Definition der Art:

DOIF ([*:[Bb]attery:.*] eq "on" and [sensor:temperaure]>20)(set...)

ist nicht eindeutig, denn im Gegensatz zu notify werden nicht nur Events ausgewertet, sondern auch Zustände. Wenn sensor triggert: Von welchem Device soll man denn Battery prüfen?

Nicht umsonst kann man in höheren Sprachen kein "Sternchen" im Variablennamen angeben ;)

Gruß

Damian



Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 30 April 2015, 21:31:03
Hi,

.*:[Bb]attery:.* { if("%" !~ m/ok/) {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")} }

Hat es bei mir nicht getan,  es kamen von allen möglichen Geräten Battery Low Meldungen obwohl diese garnicht Low sind.


.*:[Bb]attery:.low.* {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")}

Hier kommt gar nichts,  obwohl ein Gerät battery Status low hat.

Gruss Dirk
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Pfriemler am 30 April 2015, 22:07:54
Mmmmmmist.

Zitat von: hyper2910 am 30 April 2015, 21:31:03
.*:[Bb]attery:.* { if("%" !~ m/ok/) {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")} }
Hat es bei mir nicht getan,  es kamen von allen möglichen Geräten Battery Low Meldungen obwohl diese garnicht Low sind.
Ich bin mir mit diesem % nicht mehr sicher... ich glaube das ist abgelöst ... Wie gesagt, das Ding wirft Meldungen, wenn die Batteriemeldung etwas anderes als "ok" enthält. Also "Ok" etwa. Das habe ich nicht bedacht auf die Schnelle.

Zitat.*:[Bb]attery:.low.* {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")}
Hier kommt gar nichts,  obwohl ein Gerät battery Status low hat.
Ich stehe immer noch auf Kriegsfuß mit den Doppelpunkten in der Regex. Bei HM-Geräten kommt im Ereignistext "battery: low" vor, und darauf passt das Regex strenggenommen.
Wenn der Doppelpunkt nach dem Namen des Readings Name und Wert desselben trennen soll (also das Regex intern dort nochmal gespalten wird, müsste "battery:low.*" (also ohne Punkt) zum Erfolg führen... Berücksichtige ggf. abweichende Schreibweisen, also ggf. [Bb]attery:[Ll]ow.* ...

Das Rumgestochere ist mir ein bisschen peinlich ...
Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 30 April 2015, 22:14:22
Hi, kein Problem,  ich finde es super das du versuchst mir zu helfen
Titel: Antw:doif und State Dummy abfrage
Beitrag von: Puschel74 am 30 April 2015, 23:19:17
Also bei mir klappt nach wie vor der Code aus dem Wiki:
http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung (http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung)
Warum dort niemand schaut  ???

Edith: Aber die Frage hat ja mit dem Threadtitel nichts zu tun ...
Leute ihr könnt es Anfänger die nach euch kommen auch schwer machen oder auch leicht, je nachdem wie ihr wo und mit welchem Titel postet.
Der nächste Anfänger wird unter doif und State Dummy sicher nicht suchen wie er die Meldung zu seinen Batteriemeldungen bekommt ergo wird auch der nächste Anfänger einen neuen Beitrag aufmachen (so er denn überhaupt die Suche bemühen würde) - wobei auch hier vermutlich ein Blick ins Wiki gereicht hätte.
So werden in Zukunft auch die neuen hilfsbereiten Anfänger die Lust zu helfen verlieren - aber ist ja egal, der Fragesteller hat sein Ziel erreicht und dieses eine "Problem" für sich lösen können.
Was andere danach machen kann ja egal sein.
Titel: Antw:doif und State Dummy abfrage
Beitrag von: hyper2910 am 01 Mai 2015, 09:18:04
@Puschel, diese Funktion hatte ich auch laufen, nur funktionierte diese bei mir nicht, auch jetzt scheint es nur mit der

.*:[Bb]attery:.low.* {fhem("set Nachricht message Schwache Batterie im Gerät $NAME")} zu funktionieren.

Bei der anderen Variante melden sich alle möglichen Max-Komponenten immer wieder obwohl die Bat nicht leer ist!

Vielleicht kann jemand ja das WIKI erweitern,  Batteriestatus Meldungen mit Pushbullet und Max-Komponenten

.*:[Bb]attery:.low.* {fhem("set [Pushbullet-Definition] message Schwache Batterie im Gerät $NAME")}