"Und" Verknüpfung bei Befehlen

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

Vorheriges Thema - Nächstes Thema

Terabyte

Ich werde das morgen mal testen mit den Klammern.

Danke vorerst für deine Hilfe :)

War aber bestimmt nicht meine letzte Frage

Terabyte

Das mit der Klammer bekomm ich nicht hin.

Daher lasse ich es erstmal mit der Zeit bei beiden

Zrrronggg!

ich würde auf
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")}}
tippen, sicher bin ich mir aber nicht.

Aber wenn das geht was du da hast, dann benutz es ruhig.
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

Jetzt hab ich aber ein weiteres Problem.

Es wird nun alle paar Sekunden überprüft ob jemand anwesend ist und auch wenn der Schalter schon auf ON ist wieder ein Befehl gesendet dieses einzuschalten.

Im Log sieht das so aus:

2013.04.28 13:47:53 2: IT set Schalter on
2013.04.28 13:47:55 2: IT set Schalter on
2013.04.28 13:48:00 2: IT set Schalter on
2013.04.28 13:48:05 2: IT set Schalter on
2013.04.28 13:48:10 2: IT set Schalter on
2013.04.28 13:48:15 2: IT set Schalter on
2013.04.28 13:48:20 2: IT set Schalter on

Wie kann verhindern dass jedes Fall der auf on gesetzt wird? Bzw. im umgekehrten Fall auf off.
Kann man noch einen Befehl einfügen der prüft ob das Ding schon auf ON bzw. OFF steht?


Edit: Geht wohl indem man folgendes noch hinzufügt:

&& Value("Schalter") eq "off"

Puschel74

Hallo,

ich habs leider nicht so mit Einzeiler aber ich versuchs mal:

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") if (Value("Schalter") eq "off")}}

Nun sollte beim Einschalten geprüft werden ob der Schalter auf off steht.
Wenn ja wird on gesendet, wenn bereits on wird nichts gemacht - hoffe ich.

Grüße

Edith: Was aber bedeutet das der Schalter niemals off-for-timer oder ähnliches als Status bekommen darf da das ja nicht eq off ist.
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.

Terabyte

Hallo

Was bedeutet das off-for-timer?

Puschel74

Hallo,

naja das das Gerät einschaltet wenn die Zeit rum ist.
on-for-timer 20 = Gerät ist 20 Sekunden an
off-for-timer 20 = Gerät schaltet in 20 Sekunden ein oder anders gesagt Gerät ist für 20 Sekunden aus.

Evtl. war das ja jetzt ein blödes Beispiel und den off-for-timer gibt es garnicht (das hab ich jetzt nicht kontrolliert).

Mir hat aber on und on-for-timer schonmal das Schnippchen geschlagen und ich hab mich gewundert warum das Gerät nicht ausschaltet.
Klar - stand ja auf on-for-timer und nicht auf on.
Blöd gelaufen wenn vor Ablauf der Zeit ausgeschaltet werden soll und geprüft wird ob das Gerät on ist ^^

Grüße
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.

fritz

Meine ersten "best practises" Tips:

a) Teste einfach:
fhem("set Schalter on") if (Value("Schalter") ne "on") wenn Du den Schalter auf jeden Fall on setzen möchtest; ansonsten musst Du noch mehr testen, deshalb der folgende Tip:
b) Ich hatte bei meinen ersten Versuchen schon die Schn... voll von diesen langen OneLinern, in denen dann auch noch bestimmte Zeichen maskiert werden müssen. Daher bin ich ziemlich schnell dazu übergegangen,
define Handy_anwesenheit at +*00:00:03 {HandyAnwesenheit(...)} zu schreiben und den eigentlichen PerlCode in 99_myUtils.pm unter
sub HandyAnwesenheit (??)  # oder wieviele Parameter du auch immer brauchst
{...}
zu implementieren. Hat auch den Vorteil, dass du dir beliebige Hilfsroutinen schreiben und die in den unterschiedlichsten Funktionen benutzen kannst.

<F>


Terabyte

Hallo

Danke für die Antworten.

Das mit den 99_myUtils.pm muss ich mir mal ansehen.
Kenn mich ja leider noch nicht so gut aus mit dem ganzen Zeug hier :)

Zrrronggg!

Zitatden off-for-timer gibt es garnicht

FS20 kann off-for-timer, HM nicht.
Speziell bei FS20 kann man mit off-for-timer durchaus Probleme lösen. Ich schalte damit z.b. meinen Brenner aus. Vorteil: Wenn der Befehl NICHT ankommt, bleibt die Heizung an. Das ist besser als wenn die Heizung ausgeht, aber morgens nicht wieder an... Super Mieser WAF!  Und die Heizung ist im Keller und daher am Rand des Funkbereichs. Da off-for-timer i Aktor selber geschaltet wird heisst das: Wenn der Befehl zum abschalten ankommt, geht die Heizung auch wieder an, egal, ob danach die brutalste Funkstörung seit Menschengedenken losgeht. Wenn der Befehl nicht ankommt, geht die Heizung gar nicht erst aus.

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") if (Value("Schalter") eq "off")}}

Würde ich ja lieber so machen:

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

Speziell mit && kann man ja locker beliebig viele Bedingungen verknüpfen. Um klammern muss man sich ja erst bei gleichzeitiger Verwendung von || Gedanken machen.

Zitat99_myUtils.pm

Ich hielt das auch für ne gute Idee, fand dann aber in der Praxis Debuggin in 2 Dateien und mehreren Stellen, die voneinander abhängen ziemlich unpraktisch. Das richtige Escapen viel mir leichter. Meistens... :-D
Ist sicher ne Geschmacksfrage.
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

Puschel74

Hallo,

hier

define Handy_anwesenheit at +*00:00:03 {if ( ($hour < 22 && $hour > 7) && (Value("Handy_1") eq "present" || Value("Handy_2") eq "present") && Value("Schalter") eq "off") {fhem("set Schalter on") if (Value("Schalter") eq "off")}}
solltest du dir eigentlich diesen Teil
if (Value("Schalter") eq "off")
sparen können da du ja vorher schon auf
&& Value("Schalter") eq "off")
prüfst.
Aber doppelt gemoppelt hält auch besser ;-)

Ist aber auch nur ne Vermutung von mir.

Grüße
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.

Zrrronggg!

Völlig korrekt.

Ich meint latürnich

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


Sehr nachlässig von mir.
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

Puschel74

OT
War kurz davor deswegen auf -1 zu drücken ;-)
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.

fritz

Zitat von: Puschel74 schrieb am So, 28 April 2013 18:49Aber doppelt gemoppelt hält auch besser ;-)

Nicht wirklich: zweimal ist der Test falsch für den Fall, dass die Variable noch andere Werte als "on" und "off" annehmen kann und unbedingt auf "on" gesetzt werden soll. (Aber ich kenne den genauen Background nicht....) Und nur einen falschen Test berichtigen, würde nicht zum Erfolg führen.

<F>

Puschel74

Hallo,

Stimmt auch wieder.

Grüße
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.