doif und State Dummy abfrage

Begonnen von hyper2910, 29 April 2015, 00:09:10

Vorheriges Thema - Nächstes Thema

hyper2910

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!)
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

der-Lolo

Ä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....

hyper2910

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!)
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

der-Lolo

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..

Pfriemler

DOELSEIF und DOELSE sind eigentlich optional.
Funktioniert ... DOIF ([GelberSack] eq "1") ... ?

Vom 7Zöller via Tapatalk

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Pfriemler

und das DOIF benötigt ohne weitere Branches ein do always, sonst funzt es nur genau ein Mal.

Vom 7Zöller via Tapatalk

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

hyper2910

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}
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Pfriemler

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.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

hyper2910

#8
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")} }
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Pfriemler

#9
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.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Damian

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



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hyper2910

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
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Pfriemler

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 ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

hyper2910

Hi, kein Problem,  ich finde es super das du versuchst mir zu helfen
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Puschel74

#14
Also bei mir klappt nach wie vor der Code aus dem Wiki:
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.