FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: slor am 23 November 2016, 14:56:48

Titel: Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 23 November 2016, 14:56:48
Hallo Zusammen,

folgendes funktioniert bei mir nicht wie ich es erwarten würde:

(["^EG_WZ_HT_Climate$:^humidity"] < 51)

Nach meinem Verständnis sollte das nur triggern, wenn die Luftfeuchtigkeit unter 51% liegt? Richtig?

Bei mir triggert das aber ständig obwohl die Luftfeuchtigkeit bei 54% liegt. Hab ich nen Denkfehler?

Mit repeatcmd sollte das wenn es unter 51 bleibt dann immer weiter triggern bis es wieder über 51 geht?

Der gesamte Def des DoIt sieht so aus:
(["^EG_WZ_HT_Climate$:^humidity"] < 51)  ((set Telegram_Bot message @Empfänger Luftfeuchtigkeit im {(AttrVal("$DEVICE","alias", "$DEVICE"))} ist unter 50% gefallen. Bitte Luftbefeuchter einschalten!))

Falls noch jemand eine Idee, hat, wie ich den Luftfeuchtigkeitswert Dynamisch mitgeben kann, immer her damit. Das hab ich nicht hinbekommen.
Titel: Antw:Vergleichs Operator
Beitrag von: rvideobaer am 23 November 2016, 15:12:42
Hallo,

bei mir geht das mit der Helligkeit so:
([HM_Sensor:luminosity] < 1)
müsste bei Dir bedeuten:
([EG_WZ_HT_Climate:humidity] < 51)

Gruß Rolf
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: CBSnake am 23 November 2016, 15:38:09
Hi,

ich gebe die Luftfeuchtigkeit mit ner Variabel mit


({
my $msg_msgText_feucht = ReadingsVal('$DEVICE','humidity','');;
fhem ("set .............  $msg_msgText_feucht % Luftfeuchtigkeit. Bitte das Fenster öffnen.");;
})

Wenn das einfacher geht, gerne her damit :-)
Das Problem, du triggerst wie ich auch auf ein Event. Damit wird der DOIF-Fall immer wahr, der Vergleich dahinter wohl ignoriert. So hab ich das zumindest verstanden und durch Testen auch bemerkt, ich frag dann dahinter mit and [$DEVICE:humidity] < 51 nochmal ab.
Falls auch das einfacher oder richtiger geht bin ich auch daran interessiert :-)

Grüße
Achim
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 23 November 2016, 16:38:15
Danke schon mal für Eure Hilfe. Ich teste das mal.
Am liebsten hätte ich ein Doif, dass auf alle *_TH_Climate Devices und dort auf das Reading humidity triggert.
Das würde wohl mit (["^_HT_Climate:^humidity"] gehen.
Am liebsten nur auf die Devices, die unter Alias einen "Menschen lesbaren Namen" eingetragen haben.

Daher trigger ich im Moment nur auf das Wohnzimmer, da ich dort einen Alias habe. Hab es nicht hinbekommen Deveices auszuschließen, bei denen das Attribut Alias nicht existiert.

Wie man dann den Humidity Wert in der Nachricht ausgibt wäre noch interessant.
Im Beispiel von DBSnake muss die Variable ja auch im Ausführungsteil des Doif vor dem Versenden der Telegram Nachricht mit dem Reading gefüllt werden? Oder?

Das einzubauen übersteigt aktuell meine Fähigkeiten :-(
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 23 November 2016, 16:45:32
Das funktioniert:([EG_WZ_HT_Climate:humidity] < 51) die Frage ist, warum geht (["^EG_WZ_HT_Climate$:^humidity"] < 51) nicht?
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: igami am 23 November 2016, 16:53:58
Weil das eine ein Event ist und das andere ein Reading darstellt.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: CBSnake am 23 November 2016, 17:06:37
Hi,

"Befüllt" wird mit der Ausführung automatisch. Ich hab das mal für dich angepasst. Versuchs mal mit



({
my $msg_msgText_feucht_alias = AttrVal('$DEVICE','alias','');;
my $msg_msgText_feucht_humidity = ReadingsVal('$DEVICE','humidity','');;
fhem ("set Telegram_Bot message @Empfänger Luftfeuchtigkeit im $msg_msgText_feucht_alias ist $msg_msgText_feucht_humidity % . Bitte Luftbefeuchter einschalten!")}



Anstatt



((set Telegram_Bot message @Empfänger Luftfeuchtigkeit im {(AttrVal("$DEVICE","alias", "$DEVICE"))} ist unter 50% gefal..........



Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 23 November 2016, 23:01:10
irgendwie funktioniert das nicht :-(

2016.11.23 22:28:32 1: PERL WARNING: Possible unintended interpolation of @Telegram_Empfänger in string at (eval 271952) line 1.
2016.11.23 22:28:32 3: eval: {  my $msg_msgText_feucht_alias = AttrVal('EG_WZ_HT_Climate','alias','');  my $msg_msgText_feucht_humidity = ReadingsVal('EG_WZ_HT_Climate','humidity','');  fhem ("set Telegram_Bot message @@Telegram_Empfänger Luftfeuchtigkeit im $msg_msgText_feucht_alias ist $msg_msgText_feucht_humidity % . Bitte Luftbefeuchter einschalten!")}
2016.11.23 22:28:32 2: di_Trockenheits_Warnung_Tg: {  my $msg_msgText_feucht_alias = AttrVal('EG_WZ_HT_Climate','alias','');;  my $msg_msgText_feucht_humidity = ReadingsVal('EG_WZ_HT_Climate','humidity','');;  fhem ("set Telegram_Bot message @@Telegram_Empfänger Luftfeuchtigkeit im $msg_msgText_feucht_alias ist $msg_msgText_feucht_humidity % . Bitte Luftbefeuchter einschalten!")}: Global symbol "@Telegram_Empfänger" requires explicit package name at (eval 271952) line 1.


ohne die zwei @@ gab reichlich fehler für Syntax. Und es fehlte noch eine klammer am Ende.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: CBSnake am 24 November 2016, 07:26:46
Moin,

den set Telegram Befehl hab ich mir aus deinem Code geholt ;-) und ja ne Klammer am schluss ging verloren ;-) mit dem @@ geht es? oder haste noch immer Fehler? Wenn ja poste doch mal die ganze DEF

Grüße
Achim
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 24 November 2016, 09:03:16
Hallo, die Fehler kommen mit dem doppel @.
Mit nur einem bekommen ich Syntax Fehler.
Brauch ich das fhem vor dem Befehl überhaupt? Ich kann das grad nicht testen.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: Brockmann am 24 November 2016, 09:19:07
Das Problem an Deinem ursprünglichen DOIF ist, dass Du das Triggern durch ein Event und den Wertevergleich trennen musst:

Ich würde es mal so probieren:

(["^EG_WZ_HT_Climate$:^humidity"] and [?$DEVICE:humidity] < 51)

Das DOIF wird durch ein humidity-Event getriggert und prüft dann, ob beim triggernden Device das Reading humidity < 51 ist.
Im Ausführungsteil kannst Du auch einfach [$DEVICE:humidity] verwenden, um den Wert auszugeben.

Was Alias angeht, würde ich überlegen, darauf zu verzichten und den Geräten lieber gleich passende Namen zu geben. Das ist mit dem rename-Befehl auch nachträglich möglich. Ein Alias ist nur für eine anschaulichere Darstellung in der Weboberfläche vorgesehen und kann beispielsweise von DOIF nicht ausgewertet werden. Sinnvoller ist es, die Devices selbst systematisch und "sprechend" zu benennen.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: slor am 24 November 2016, 11:21:58
Danke! Ich probiers mal aus.

Meine Geräte sind sehr systematisch benannt... :-)
Aber Heizung Wohnzimmer ist halt besser als EG_WZ_HT

Für Scripte etc. sind die kurzen Bezeichnungen besser.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: Brockmann am 24 November 2016, 11:33:54
Du könntest für jedes Gerät einen beliebigen sprechenden Namen Deiner Wahl in einem Reading bzw. UserReading speichern. Auf den kannst Du dann auch von einem DOIF aus zugreifen.
Titel: Antw:Vergleichs Operator funktioniert nicht wie gedacht
Beitrag von: CBSnake am 24 November 2016, 11:36:07
Hi,

ja das fhem vor dem Befehl brauchst du ;-) vorher warst du durch die { in perl, nun musst du zurück zur fhem ebene.
Was passiert wenn du alles zwischen den " " ohne die $ direkt oben in der Eingabe abschickst? geht das durch? also
set Telegram_Bot message @@Telegram_Empfänger Luftfeuchtigkeit im msg_msgText_feucht_alias ist msg_msgText_feucht_humidity % . Bitte Luftbefeuchter einschalten!

Warum hast du Räume bzw Geräte ohne Alias? ;-)

Grüße
Achim