Frage zu zwei if Bedingungen

2,213 views
Skip to first unread message

Mitch

unread,
Feb 29, 2012, 3:34:33 PM2/29/12
to fhem-...@googlegroups.com
Hallo Zusammen,

ich kämpfe jetzt schon seit drei Stunden mit zwei Bedingungen.

Ich habe einen Dummy Schalter und einen echten
Es soll ein FS20 geschlaten werden, wenn beide Schalter on sind.

Ich hatte erst das probiert: define act_on_zweischalter notify dummy {if ("%" eq "on") && ("echter" eq "on") {fhem ("schalte FS20")}}
dann das hier: define act_on_dummy notify dummy {if ("%" eq "on") {fhem ("define act_on_echter {if ("%" eq "on") {fhem ("schalte FS20")}}}}
und dann noch ein paar Kombinationen daraus, aber es will einfach nicht funktionieren.

Danke für eure Hilfe!

Zrrronggg!

unread,
Feb 29, 2012, 8:37:36 PM2/29/12
to FHEM users

Erstes Beispiel, aber:

{ if ("%" eq "on" && "$value{echter}" eq "on") { fhem ("set FS20dings
on") }}

unimatrix

unread,
Mar 1, 2012, 3:03:21 AM3/1/12
to fhem-...@googlegroups.com
Was genau funktoniert denn nicht?
Dein Notify triggert natürlich nur wenn sich der Zustand vom Dummy ändert. Du willst aber sicher auch dann schalten, wenn du den anderen Schalter drückst. Bin noch neu in FHEM aber denke mal du brauchst dazu einen zweiten Notify.

Mitch

unread,
Mar 1, 2012, 11:49:44 AM3/1/12
to fhem-...@googlegroups.com
FUnktioniert leider nicht.
ich habe jetzt glaube ich alle Kombinationen ausgetestet und bekomme immer
Global symbol "$value" requires explicit package name at
oder
syntax error at
als Fehlermeldung.

Habe auch AND statt && getestet, da ich glaube bei String muss man AND nehmen.

Noch jemand eine Idee?

Nochmal zur Erklärung:
Ein FS20ST soll nur schlaten, wenn zwei Schalter auf ON stehen (einer davon ist ein "echter", der andere ein Dummy)



Am Donnerstag, 1. März 2012 02:37:36 UTC+1 schrieb Zrrronggg!:

Zrrronggg!

unread,
Mar 1, 2012, 4:00:57 PM3/1/12
to FHEM users

> Global symbol "$value" requires explicit package name at
> oder
> syntax error at
> als Fehlermeldung.

Das ist aber mal ne seltsame Fehlermeldung, verstehe ich nicht.

So oder so, dies hier muss funktionieren
define act_on_zweischalter notify dummy { if ("%" eq "on" &&
"$value{echter}" eq "on") { fhem ("set FS20dings
on") }}

Muss gehen, son Kram hab ich reichlich und bei mir geht der.
Allerdings - da hat unimatrix recht - reagiert der nur, wenn der
Zustand von "dummy" sich ändert. Wenn du "echter" schaltest passiert
unmittelbar nix.


> Global symbol "$value" requires explicit package name at
> oder
> syntax error at
> als Fehlermeldung.

Hm. Ob deine (Perl)Installation irgendwie Rotte ist?

> Habe auch AND statt && getestet, da ich glaube bei String muss man AND nehmen.

Das wäre mir neu und mit Strings hat das doch nix zu tun, es werden
Bedingungen verknüpft. Links und rechts von "&&" können beide
ERGEBNISSE jeweils TRUE oder FALSE sein.

if a && b ist insgesamt TRUE wenn a und b beide TRUE sind.

Im Gegensatz z.b. zu

if a || b das ist nämlich TRUE wenn a ODER b TREU ist.

Siehe z.b. hier:
http://www.tizag.com/perlT/perlif.php


> Nochmal zur Erklärung:
> Ein FS20ST soll nur schlaten, wenn zwei Schalter auf ON stehen (einer davon ist ein "echter", der andere ein Dummy)

So richtig erklärts das noch nicht.

Welches EVENT soll den Vergleich den auslösen? Wenn schalter auf on
"stehen", gibts kein Event.

Ich nehme mal na, du meinst folgendes:
Wenn einer der beiden Schalter "dummy" oder "echter" auf "on"
schalten, und der andere jeweils auch "on" ist, soll Aktion erfolgen.
Richtig?


Es gibt da zahlreiche Möglichkeiten. Drei Stück, die mir gerade so
einfallen:


1. Die obige Vorgehensweise 2x, eines für jeden Schalter als Auslöser:


define act_on_zweischalterD notify dummy { if ("%" eq "on" &&
"$value{echter}" eq "on") { fhem ("set FS20dings
on") }}

define act_on_zweischalterD notify echter { if ("%" eq "on" &&
"$value{dummy}" eq "on") { fhem ("set FS20dings
on") }}


2. Möglichkeit: "&&" weglassen, wenn das irgendwie nicht läuft, indem
der erste Test schon ins notify gelegt wird:

define act_on_zweischalterD notify dummy:on { if ("$value{echter}" eq
"on") { fhem ("set FS20dings
on") }}

define act_on_zweischalterE notify echter:on { if ("$value{dummy}" eq
"on") { fhem ("set FS20dings
on") }}



3. Möglichkeit: Das Ganze mit nur EINEM Statement, dazu müssen die
Schalter im Namen gleich anfangen.
Also der Dummyschalter heisst z.b. "schaltdummy" und der echte
Schalter heisst "schaltecht"

define act_on_zweischalter notify schalt.*:on { if ("$value{echter}"
eq "on" && "$value{dummy}" eq "on") { fhem ("set FS20dings on") }}


Ich habe an verschiedenen Stellen in meiner Konfigarition alle diese
Möglichkeiten verwendet und alle gehen bei mir.
(Höchstes, dass ich beim runtertippen jetzt na Klammer versiebt habe)

Zrrronggg!

unread,
Mar 1, 2012, 4:04:05 PM3/1/12
to FHEM users
(oder "Konfigarition" falsch schrieb)

unimatrix

unread,
Mar 1, 2012, 4:04:56 PM3/1/12
to fhem-...@googlegroups.com
wenn wir mal kurz ignorieren dass es gehen müsste, was aber AUCH gehen müsste, ist die ReadingsVal-Funktion zu nutzen. Also nicht $value{echter} sondern dort stattdessen ReadingsVal("echter","state","off")

UliM

unread,
Mar 1, 2012, 6:02:05 PM3/1/12
to fhem-...@googlegroups.com
...und Value("device") statt $value{"device"}
siehe http://fhem.de/commandref.html#perl

Zrrronggg!

unread,
Mar 1, 2012, 8:51:09 PM3/1/12
to FHEM users
Eh....

On 2 Mrz., 00:02, UliM <uli.ma...@googlemail.com> wrote:
> ...und Value("device") statt $value{"device"}
> siehehttp://fhem.de/commandref.html#perl

Wenn $value{"device"} nicht geht, würde die Hälfte meiner Steuerung
nicht gehen.
Unter anderem würde die Alarmanlage, die ich in den letzten Tagen
gebaut habe keinen Mucks machen, weil da die ganzen
Melderabhängikeiten mit Konstrukten wie
{ if ("$value{Tuer1}" eq "zu" && "$value{Tuer2}" eq "zu" &&
"$value{Tuer3}" eq "zu") { fhem ("set Meldegruppe1 on") }}
funktioniert.

Die Alarmanlage funktioniert aber 1a. (Leider: Heute erstmals aus
versehen in eine scharfe Anlage gelaufen: 110 DB Piezo Pieper tut
richtig weh.)

Ich formuliere mal so: Bei meiner Fhem Installationen würden alle von
mir genannten Beispiele oben funktionieren (von Flüchtigkeitsfehlern
in dem was ich hinschrieb abgesehen).

Rudolf Koenig

unread,
Mar 2, 2012, 3:00:12 AM3/2/12
to fhem-...@googlegroups.com
On Thu, Mar 01, 2012 at 01:04:56PM -0800, unimatrix wrote:
> wenn wir mal kurz ignorieren dass es gehen m�sste, was aber AUCH gehen
> m�sste, ist die ReadingsVal-Funktion zu nutzen. Also nicht $value{echter}
> sondern dort stattdessen ReadingsVal("echter","state","off")

Achtung: es gibt einen leichten Unterschied z.w $value{x}/Value("x") und
ReadingsVal("x", "state", undef), da es in zwei verschiedenen Variablen
gespeichert ist. DoTrigger() versucht diese beiden synchron zu halten.
Nein, ich finde das auch nicht toll.

Mitch

unread,
Mar 2, 2012, 3:17:07 AM3/2/12
to fhem-...@googlegroups.com
Danke euch für eure Antworten.
Ich werde das heute Abend nochmal testen.

Achja, ReadingsVal geht natürlich nicht, da der "Empfänger" ein FS20ST ist und dieser ja keine Rückmeldung gibt, bzw. sich nicht auslesen lässt.

Nochmal zum genauen Hintergrund.
Ich habe in meiner Klingel einen FS20Sender eingebaut, dieser sendet, wenn es klingelt.
Nun wird ein Dummy definiert und nur wenn dieser auf "on" steht, wird durch den Klingel FS20 eine Steckdoese FS20ST angesteuert.

Somit werde ich nochmal das hier testen:
define act_on_Türklingel notify Klingel2 {if ("%" eq "on" && "$value{dummy}" eq "on") { fhem ("set FS20ST on") }}

Rudolf Koenig

unread,
Mar 2, 2012, 3:47:34 AM3/2/12
to fhem-...@googlegroups.com
> Achja, ReadingsVal geht nat�rlich nicht, da der "Empf�nger" ein FS20ST ist
> und dieser ja keine R�ckmeldung gibt, bzw. sich nicht auslesen l�sst.

Das ist kein Grund, und ich faende es toll wenn man solche Aussagen vor dem
Posten verifizieren wuerde, sonst wird es von Anfaenger fuer bare Muenze
gehalten.

fhem> { ReadingsVal("FS20_SchalterName", "state", "Leer")}
on

Mitch

unread,
Mar 2, 2012, 4:01:52 AM3/2/12
to fhem-...@googlegroups.com
Aber Rudi, ein FS20 sendet nichts zurück.
Gerade nochmal getestet: { ReadingsVal("FS20_

Fenster", "state", "Leer")}

kommt immer: Leer

Es ist ja uch so, wenn Du im FHEM einen FS20ST auf ON setzt und dann manuel, also direkt am FS20ST ausschaltest, steht er im FHEM immer noch auf ON.

Du kannst mit ReadingVal nur den Status aus FHEM auslesen, nicht aus dem Schalter.

Oder steh ich jetzt total auf dem Schlauch??

Am Freitag, 2. März 2012 09:47:34 UTC+1 schrieb Rudolf Koenig:
> Achja, ReadingsVal geht nat�rlich nicht, da der "Empf�nger" ein FS20ST ist
> und dieser ja keine R�ckmeldung gibt, bzw. sich nicht auslesen l�sst.

Rudolf Koenig

unread,
Mar 2, 2012, 4:38:55 AM3/2/12
to fhem-...@googlegroups.com
> Aber Rudi, ein FS20 sendet nichts zur�ck.

Aber Mitch, ich muesste doch wissen, was ich programmiert habe, und seit 6
Jahren verwende, auch wenn ich wg. Grippe z.Zt eine lange Leitung habe.
ReadingsVal hat nichts mit Zurueckmeldung zu tun, sondern damit, was der
Modul-Programmierer als status sehen moechte. Im Fall von FS20 ist es das
letzte ausgesendete oder empfangene Befehl.

Mitch

unread,
Mar 2, 2012, 4:57:23 AM3/2/12
to fhem-...@googlegroups.com
Natürlich glaube ich, das Du weis was Du programmiert hast :-)

Aber in Deinem letzten Satz ist es doch schön geschrieben: Im Fall von FS20 ist es das

letzte ausgesendete oder empfangene Befehl.


Und das hilft mir in meinem Fall nicht weiter, weil ich den echten/realen Zustand benötige und nicht den letzten, den FHEM empfangen/gesendet hat.
Das ist halt der größte Nachteil bei den FS20 Komponenten.

Liegt ja auch nicht an Deiner Programmierung, sondern am FS20 System.


Am Freitag, 2. März 2012 10:38:55 UTC+1 schrieb Rudolf Koenig:
> Aber Rudi, ein FS20 sendet nichts zur�ck.

Zrrronggg!

unread,
Mar 2, 2012, 6:55:57 AM3/2/12
to FHEM users

> Und das hilft mir in meinem Fall nicht weiter, weil ich den echten/realen
> Zustand benötige und nicht den letzten, den FHEM empfangen/gesendet hat.
> Das ist halt der größte Nachteil bei den FS20 Komponenten.


Bei Sendern gibt es den Nachteil kaum. Die fehlende Bidirektionle
Kommunikation ist doch nur dann ein Problem, wenn der Sender wissen
will, ob der EMPFÄNGER den Befehl bekommen hat.
Aber was hilft es der Türklingeltaste zu wissen, ob Fhem den Tastdruck
bemerkt hat?
Nichts.
Gerade in der von dir verwendeten Richtung gibt es im praktischen
Verhalten keinen unterscheid zwischen HM und FS20.


Also: Du hast doch eine Klingel, die aus einem Sender besteht und der
sendet doch. Und wenn er sendet ändert sich auch der Status in Fhem,
*wenn* empfangen wurde. Wurde aber NICHT empfangen hat, geht
ReadingsVal nicht, aber alles andere auch nicht.

> Zustand benötige und nicht den letzten, den FHEM empfangen/gesendet hat.

Aber bei einer Klingel brauchst du GENAU den zuetzt empfangenen, der
unter normalen Bedingungen auch der REALE ist. Wenn nicht - die
Klingeltatste also sendet, aber Fhem nix empfängt - gibt es KEINE
Methode den Tastendruck festzustellen. Z.B. würde dann auch das notify
nicht funktionieren.

So oder so: Dein letzter Vorschlag, was du probieren willst sollte
gehen.

Und Rudi: Gute Besserung.

Mitch

unread,
Mar 3, 2012, 4:01:40 AM3/3/12
to fhem-...@googlegroups.com
So, gerade mal getestet.

Mit define act_on_Tuerklingel notify Klingel2 {if ("%" eq "on" && "$value{Klingel1}" eq "on") { fhem("set Tuerlicht on-for-timer 1") } } funktioniert es jetzt so wie ich mir das vorgestellt habe.

Vielen Dank für eure Hilfe!


Gerd

unread,
Mar 3, 2012, 7:45:09 AM3/3/12
to fhem-...@googlegroups.com
Hallo Mitch,

vielleicht blöde Frage, aber nur zum Verständnis für einen Anfänger, "Türklingel2" ist in deinem ersten Post der Dummy?

Ich habe nähmlich ähnliches vor und möchte es übernehmen.

Grüße

HORCH & KUCK

unread,
Mar 3, 2012, 11:05:36 AM3/3/12
to fhem-...@googlegroups.com
Bin zwar nicht angesprochen, wollte aber meinen Senf loswerden. 
Da Mitch's letzter Post funktioniert, würde ich nicht den ersten Post als Vorlage nehmen :)
Und da müsste Klingel2 der reale Klingeltaster sein, der nur dann etwas auslöst, wenn auch vorher Dummy Klingel1 "on" ist. Klingel1 ist also so etwas wie ein "Soll-es-wirklich-klingeln?-Schalter" oder einfach eine "Klingelsperre".
Für den Fall dass das nicht stimmt: duck-mich-ganz-klein

Heinz
--
To unsubscribe from this group, send email to
fhem-users+...@googlegroups.com

Gerd

unread,
Mar 3, 2012, 12:01:27 PM3/3/12
to fhem-...@googlegroups.com
Wollte schon die letzte als funktionierend, geltende Version nehmen.

Trotzdem Danke für die Info.

Gerd

Mitch

unread,
Mar 3, 2012, 12:16:32 PM3/3/12
to fhem-...@googlegroups.com
Hallo,

wie gesagt, dieser hier funktioniert.

Es ist so wie horchundkuck geschrieben hat.
Klingel2 ist der reale FS20 Sender, der am Klingeltrafo hängt, Klingel 1 ist ein Dummy FS20.
Der Empfänger Tuerlicht wird nur angeschalten, wenn der Dummy Klingel1 auf ON steht und es an der Tür klingelt.
Wenn der Dummy Klingel1 auf OFF steht und es Kligelt an der Tür passiert nichts.

Gruß
Mitch
Reply all
Reply to author
Forward
0 new messages