"Und" Verknüpfung bei Befehlen

Begonnen von Terabyte, 27 April 2013, 18:10:45

Vorheriges Thema - Nächstes Thema

Terabyte

Hallo

Ich möchte gerne, wenn 2 Handys das WLAN verlassen, dass eine bestimmte Aktion durchgeführt wird.

Also erst wenn Handy 1 UND 2 sich abgemeldet haben soll zum Beispiel Steckdose 1 sich abschalten.

Wie das ganze mit 1 Handy funktioniert weiß ich bereits. Leider habe ich noch nicht herausgefunden wie man das 2. in den Befehl hinzufügen kann.

Dies ist der Code den ich für 1 Handy benutze:

define Watchdog_Abwesenheit watchdog Handy_1:absent 00:00:05 Handy_1:present {\
 {fhem("set Schalter off")}\
 {fhem("setstate Watchdog_Abwesenheit defined")}\
 }

Wie kann ich nun den Code so umwandeln das die Bedingung mit dem 2. Handy erfüllt wird?

Danke schonmal

UliM

Versuch mal

define Watchdog_Abwesenheit watchdog (Handy_1:absent|Handy_2:absent) 00:00:05 (Handy_1:present|Handy_2:present) {\
{fhem("set Schalter off")}\
{fhem("setstate Watchdog_Abwesenheit defined")}\
}

Ich fürchte aber der zieht auch, wenn Handy1 present und Handy2 absent ist.

also via dummy?

define handypresence dummy
define presencepruefen at +*00:01 {my $state = (Value("Handy1") eq "present");$state = $state && (Value("Handy2") eq "present"); fhem("set handypresence $state")}

Damit führt handypresence die Info, ob beide Handys anwesend sind - ist eines abwesend, wird handypresence 0.

Und dann
define Watchdog_Abwesenheit watchdog handypresence:1 00:00:05 handypresence:0 {\
{fhem("set Schalter off")}\
{fhem("setstate Watchdog_Abwesenheit defined")}\
}

Weder bin ich sicher, ob's macht was Du willst, noch ob der watchdog so tut.
Eher mal als Denkanstoss...

LG, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Terabyte

Hallo

Bei der Version mit dem Dummy bekomme ich leider folgende Fehlermeldung

Unknown command $state, try help Unknown command fhem("set, try help

UliM

Hi,
Hmm - Versuch mal nen anderen Variablennamen, zB $daheim :)
$state ist mglw ne Standardvariable in fhem...
Gruß Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Terabyte

Leider selbe Fehlermedung

Unknown command $daheim, try help Unknown command fhem("set, try help

Zrrronggg!

ich durchdringe:

define presencepruefen at +*00:01 {my $state = (Value("Handy1") eq "present");$state = $state && (Value("Handy2") eq "present"); fhem("set handypresence $state")}

noch nicht ganz, aber ich halte es für denkbar, dass da Klammer und fehlende ";" escapes drin sein könnten. Leider kann ich als Watchdog-Looser in der Sache selbst nicht helfen.

Ich würde das ohne Watchdog einfach per "at *00:03:00" prüfen:

define Handy_abwesenheit at *00:03:00 {if (Value("Handy_1") eq "absent" && Value("Handy_2") eq "absent") {fhem("set Schalter off")}}



(Aus dem Kopf, ungetestet)
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Terabyte

Hallo

Würde das nicht bedeuten, dass erst um 00:03Uhr der Status überprüft wird?

Zrrronggg!

ZitatWürde das nicht bedeuten, dass erst um 00:03Uhr der Status überprüft wird?

Stimmt, "+" vergessen.

define Handy_abwesenheit at +*00:03:00 {if (Value("Handy_1") eq "absent" && Value("Handy_2") eq "absent") {fhem("set Schalter off")}}
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Terabyte

Danke.

Das scheint zu funktionieren :)

Welchen Vor bzw. Nachteil hat es denn wenn man das mit "at" macht und nicht mit watchdog?


Kann man zu diesem Code auch noch eine zeitliche Bedingung hinzufügen?
Also, dass von 22:00 - 06:00Uhr der Schalter auf Off bleibt unabhängig von den Handys

Zrrronggg!

ZitatWelchen Vor bzw. Nachteil hat es denn wenn man das mit "at" macht und nicht mit watchdog?

Es hat den Vorteil, dass ich weiss wie es geht und dir daher eine Lösung anbieten kann. Ansonsten ist es einfach nur ein anderer Weg zum Ziel.


ZitatKann man zu diesem Code auch noch eine zeitliche Bedingung hinzufügen?
Also, dass von 22:00 - 06:00Uhr der Schalter auf Off bleibt unabhängig von den Handys

Hm. Das ist bei deinem Code schon gegeben.

Ich meine: Dein Code schaltet unter bestimmten Bediungungen den Schalter OFF, aber NIEMALS on. Er schaltet auch zwischen 22:00 - 06:00Uhr den Schalter OFF oder nicht... aber dann ist er ja auch off.

Oder meinst du: define Handy_abwesenheit at +*00:03:00 soll in der Zeit nichts machen?

Das geht, ich bin mir aber gerade etwas über die Klammerung unsicher. Versuch mal bitte:

define Handy_abwesenheit at +*00:03:00 {if ( ($hour < 21 &&  $hour > 7) && Value("Handy_1") eq "absent" && Value("Handy_2") eq "absent") {fhem("set Schalter off")}}

Aus dem Kopf und Ungetestet und ich bin nicht 100% sicher, dass es so richtig ist. Beim Rumspielen mit Stundenbedingungen schiesst man sich gerne ein Loch ins Knie, indem man Bedingen wählt die immer oder nie zutreffen.


FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Terabyte

Im Prinzip möchte ich diesen Code zu einer bestimmten Zeit deaktivieren, welcher den Schalter auf ON stellt. Auf OFF stellen zu einer bestimmten Zeit ist wahrscheinlich rinfacher

define Watchdog_Anwesenheit watchdog (Handy_1:present|Handy_2:present) 00:00:05 (Handy_1:absent|Handy_2:absent) {\
fhem("set Schalter on");;\
fhem ("setstate Watchdog_Anwesenheit defined");;\
}

Edit: Ich werde mal versuchen den Befehlt auf "at" umzuschreiben

Terabyte

Danke. Hab mal den Code etwas umgebastelt

Mit diesem Code lässt sich die Aktivierung des Schalters ab einer bestimmten Zeit zu verhindern

define Handy_anwesenheit at +*00:00:03 {if ( ($hour < 22 &&  $hour > 7) && Value("Handy_1") eq "present"|Value("Handy_2") eq "present") {fhem("set Schalter on")}}


Jetzt brauch ich nur noch einen Code der mir den Schalter um 22:01 auf "off" stellt. Dann müsste es im Prinzip so funktionieren wie ich mir das vorstelle.
Edit: Ok den hab ich nun auch :)

define Schalter_AUS at *22:01:00 set Schalter off

Zrrronggg!

define Handy_anwesenheit at +*00:00:03 {if ( ($hour < 22 && $hour > 7) && Value("Handy_1") eq "present"|Value("Handy_2") eq "present") {fhem("set Schalter on")}}

Wenn du Value("Handy_1") eq "present" ODER Value("Handy_2") eq "present" meinst müssen das 2x | sein:

define Handy_anwesenheit at +*00:00:03 {if ( ($hour < 22 && $hour > 7) && Value("Handy_1") eq "present" || Value("Handy_2") eq "present") {fhem("set Schalter on")}}

Ausserdem: Die ungeklammerte Mischung aus && und || führt nicht immer zum gewünschten Ergebnis. && bindet stärker als ||.
Der Code oben wird daher z.b. auch auslösen, wenn NUR Value("Handy_2") eq "present" true ist!

Genau genommen sagst du jetzt nämlich:
Löse aus wenn( Stunde kleiner 22 und Stunde grösser 7 und Handy1 = present)  *ODER*  Handy2 = present  (!)

Vergleich mal diese Diskussion:
http://forum.fhem.de/index.php?t=msg&goto=71457&rid=33#msg_71457
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Terabyte

Ja danke.

Hab jetzt beim 2. auch noch eine Zeit hinzugefügt

define Anwesenheit at +*00:00:05 {if ( ($hour < 22 &&  $hour > 7) && Value("Handy_1") eq "present" || ($hour < 22 &&  $hour > 7) && Value("Handy_2") eq "present") {fhem("set Schalter on")}}

Zrrronggg!

Ich glaube das hätte man auch mit Klammern lösen können, Aber so geht's vermutlich auch.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL