FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Estrella am 05 Juli 2018, 15:24:31

Titel: [gelöst] notify mit If und "&&"
Beitrag von: Estrella am 05 Juli 2018, 15:24:31
Hallo Zusammen,
ich habe jetzt einige Zeit experimentiert; komme aber nicht zum Ziel
Aufgabenstellung:
In Abhängigkeit zweier Variablen , die mit && verknüpft sind, soll eine Aktion ausgeführte werden.
Solange ich ausschließlich mit einer Variablen arbeite, funktioniert das Ausführen der Aktion - kommt die 2. Variable mit && dazu, rührt sich nichts.
Variable 1 = Luxwert eines Lichtsensors
Variable 2 = Merker, ob Aktion bereits ausgeführt ist

Mit

SW_WoZ_Stehlampe_an D_Brightness_aktuell { if ("D_Brightness_aktuell" lt "Schwelle_Sw.WoZ.an")
{ fhem("set Switch_WoZ_Stehlampe on;set Merker_Sw.WoZ 1")}}

funktioniert es.

??? wo geht da was schief ???
Vielen Dank schon mal und Gruss
Estrella


set Merker_Sw.WoZ 0
#NAME    Merker_Sw.WoZ
#STATE   0
#TYPE    dummy

+*00:15:00 { my $d= ReadingsVal("HM_Lichtsensor","brightness",0); fhem("set D_Brightness_aktuell $d")}
#NAME   D_Brightness_aktuell
#STATE 550.15
#TYPE   dummy

set Schwelle_Sw.WoZ.an 1000
#NAME  Schwelle_Sw.WoZ.an
#STATE 1000
#TYPE   dummy

SW_WoZ_Stehlampe_an D_Brightness_aktuell { if (("D_Brightness_aktuell" lt "Schwelle_Sw.WoZ.an") && ("Merker_Sw.WoZ" eq 0))
{ fhem("set Switch_WoZ_Stehlampe on;set Merker_Sw.WoZ 1")}}


Titel: Antw:notify mit If und "&&"
Beitrag von: Otto123 am 05 Juli 2018, 15:37:57
Hallo Estrella,

was soll das für Code sein? Aus welchem System?
Der Teil in den Codetags steht wo?  :o

Diese Bedingung ist immer war
("D_Brightness_aktuell" lt "Schwelle_Sw.WoZ.an") aber nicht wegen den Inhalten der vermeintlichen Geräte, sondern einfach weil es ein String Vergleich ist. Warum "D_Brightness_aktuell" kleiner als "Schwelle_Sw.WoZ.an" ist kann ich auf Anhieb nicht sagen, aber ich habe getestet: es ist so.  ;D :o :-*

Ich weiß der Hinweis kommt immer nicht so gut, aber:
http://perldoc.perl.org/index.html
https://commandref.fhem.de/

Gruß Otto
Titel: Antw:notify mit If und "&&"
Beitrag von: Damian am 05 Juli 2018, 15:43:21
ZitatWarum "D_Brightness_aktuell" kleiner als "Schwelle_Sw.WoZ.an" ist ...

Weil D vor S im Alphabet vorkommt ;)
Titel: Antw:notify mit If und "&&"
Beitrag von: Beta-User am 05 Juli 2018, 15:47:53
(war ja zu erwarten, dass da jemand schneller ist. Daher ggf. doppelt...)

Vorab: Direktes Editieren der cfg ist als Gefahrenpunkt bekannt?

Dann ist da einiges an Grundlagen nicht berücksichtigt.
- Was soll das für ein Device-Typ sein?
- Auf Werte greift man entweder mit ReadingsVal() oder Value() zu, ggf. auch mit magicSets.
- Dann sind deine Vergleiche alphanummerisch. Ist das so gewollt? Eigentlich sollte hier "<" und "==" besser funktionieren.
- Die Bedingungen brauchen auch nur dann geklammert zu werden, wenn ein "or" dazu käme.

Versuch' mal folgendes im Eingabefeld:
{if (Value("D_Brightness_aktuell") < Value("Schwelle_Sw.WoZ.an") && Value("Merker_Sw.WoZ") == 0)
{ fhem ("set Switch_WoZ_Stehlampe on;set Merker_Sw.WoZ 1")}}

Und dann gehst du in den Event-Monitor und versuchst nach der Anleitung im Wiki einen Event-Handler zu definieren, der dann den Code ausführt (wenn er funktioniert wie gewollt).

Ansonsten kommt es mir so vor, als solltest du a) das Einsteiger-pdf mal durcharbeiten und b) überlegen, ob das, was du hier tun willst nicht besser in einem THRESHOLD aufgehoben wäre. Und warum man hier einen Dummy braucht, um ein Reading zu verpacken, verstehe ich auch nicht, aber du wirst Gründe haben...

Titel: Antw:notify mit If und "&&"
Beitrag von: Otto123 am 05 Juli 2018, 15:53:30
Zitat von: Damian am 05 Juli 2018, 15:43:21
Weil D vor S im Alphabet vorkommt ;)
ach ist das einfach, Länge, Quersumme und Rest spielen dann keine Rolle. Erst wieder wenn der erste Buchstabe gleich ist.
Na dann hätten wir das auchmal besprochen  ;D
Titel: Antw:notify mit If und "&&"
Beitrag von: Wuppi68 am 05 Juli 2018, 17:28:00
hmmmm, frei interpretiert ;-)

Notify auf Brightness und danach die Lampe direkt geschaltet ... wozu Dummies ;-)


define ntyLampe notify HM_Lichtsensor:brightness.* {
  if (($EVTPART1  < Value("Schwelle_Sw.WoZ.an") && (Value("Merker_Sw.WoZ") == 0))  {fhem "set lampe on"}
  else {fhem "set lampe off"};
}


in Merker_Sw.WoZ schaltest Du dann die Automatik ein und aus
Titel: Antw:notify mit If und "&&"
Beitrag von: Estrella am 09 Juli 2018, 18:46:16
Hallo Zusammen,
meinen besten Dank für die prompten und sehr aufschlußreichen Antworten bzw. Lösungsvorschläge.
Ich habe die Lösung von "Beta-User" gewählt, da sie exakt meine Vorstellung trifft.
Sorry, dass ich mit so einer trivialen Frage gekommen bin; im Forum habe ich trotz intensiver Suche keine passende Lösung gefunden.
Die Anmerkungen und Lösungsvorschläge haben mir allerdings jetzt sehr deutlich die Augen hinsichtlich Syntax und des "Zugriffs" auf die Daten geöffnet - vielen Dank!
und Gruß
Estrella