neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

Damian

#120
Zitat von: noice am 17 Februar 2014, 23:23:31

define wohnen_aus notify WZ_SamsungTV IF (([WZ_SamsungTV:state] eq "absent") and ($hour ~~ [20..3])) ((define aus at +00:00:30 set WZ_LED_Stripe,Balkon_Licht,WZ_Licht,WZ_Spielekonsolen off)) ELSE ((define aus at 23:00:00 set WZ_LED_Stripe,Balkon_Licht,WZ_Licht,WZ_Spielekonsolen off))


diesen code

im DEF scheint er es zu nehmen
hab nur noch 2 Sachen verbessert/geändert zwecks test

ausgabe vom log: 2014.02.17 23:23:53 3: define aus at 23:00:00 set WZ_LED_Stripe,Balkon_Licht,WZ_Licht,WZ_Spielekonsolen off : aus already defined, delete it first
2014.02.17 23:23:53 3: wohnen_aus return value: aus already defined, delete it first

Dann funktioniert ja alles, wie programmiert.  :)

Die Fehlermeldungen kommen natürlich immer dann, wenn "aus" definiert wird und nicht zum Zuge kommt (hier um 23:00 Uhr), wie jetzt bei deinen Tests.

Ich würde solche Zeitverzögerungen +00:00:30 statt mit at mit sleep machen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

noice

Danke nochmals.
ich werde das jetzt mal so laufen lassen. mal sehen wie es dann in der Praxis aussieht.
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Eisingstone

#122
Hallo Damian,

erst einmal Danke für all die Mühen die Du bisher in dieses Modul gesteckt hast.
Einige Sachen habe ich mit der neuen Möglichkeit umgesetzt bekommen, aber nun habe ich den Punkt erreicht wo ich absolut nicht weiterkomme, vielleicht hast Du da eine Idee wieso es nicht funktioniert.


## GA_Unautorisierte_Tueroeffnung definieren
define GA_Unautorisierte_Tueroeffnung dummy
attr GA_Unautorisierte_Tueroeffnung group Pushover Meldungen

## GA_Unautorisierte_Tueroeffnung definieren
define GAUnautorisierteTueroeffnungAn notify GA_Tuer_Kontakt:open.* { fhem ("set GA_Unautorisierte_Tueroeffnung on") if (Value("Handy_XXXXX") eq "absent")}
define GAUnautorisierteTueroeffnungAus notify GA_Tuer_Kontakt:open.* { fhem ("set GA_Unautorisierte_Tueroeffnung off") if (Value("Handy_XXXXX") eq "present")}

define GAUnautorisierteTueroeffnungPushover notify GA_Unautorisierte_Tueroeffnung:on ........................        und so weiter


Nach diesem Cosde funktioniert soweit alles, die Pushover wird geschickt sobald das Handy_XXXXX nicht mehr "present" ist.
Wenn ich aber nun ein zweites Handy einbaue und das IF Modul benutze, geht gar nichts


##define GAUnautorisierteTueroeffnungAn notify GA_Tuer_Kontakt:open.* IF (([Handy_XXXXX:state] eq "absent") and ([Handy_YYYYY:state] eq "absent")) (set GA_Unautorisierte_Tueroeffnung on)
##define GAUnautorisierteTueroeffnungAus notify GA_Tuer_Kontakt:open.* IF (([Handy_XXXXX:state] eq "present") or ([Handy_YYYYY:state] eq "present")) (set GA_Unautorisierte_Tueroeffnung off)


Ziel soll sein das wenn "beide" Handys absent sind soll der Türkontakt eine Pushover Meldung auslösen und wenn ein Handy wieder present soll keine Meldung mehr kommen.
Bestimmt sehe ich den Wald vor lauter Bäume nicht und das Problem ist gar nicht so groß.

Vielen Dank schon einmal im vorraus.
Gruß
Stefan

Edit: man sollte auch die aktuelle Version in FHEM reinladen...... wenn man noch ein alte Version benutzt wird das irgendwie nichts  :o
FHEM 5.7 (Dev.), Debian Jessie Server
HM-LAN, HM-CFG-USB-2, RFXTRX433-USB, BT, HUE sowie diverse Homematic Sensoren und Aktoren

Damian

Hallo Stefan,
wenn es keine anderen Zustände außer absent und present gibt, dann würde folgendes ausreichen:

define GAUnautorisierteTueroeffnungAn notify GA_Tuer_Kontakt:open.*
IF ([Handy_XXXXX:state] eq "absent" and [Handy_YYYYY:state] eq "absent")
   (set GA_Unautorisierte_Tueroeffnung on)
ELSE
   (set GA_Unautorisierte_Tueroeffnung off)


Ich gehe davon aus, dass die Zustände auch im Reading:state vorkommen hier also [Handy_XXXXX:state] und nicht nur im Status des Handys.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der-Lolo

Und hierzu noch bitte kurz zur Info für mich "or" funktioniert nicht - oder?

Damian

#125
Zitat von: der-Lolo am 20 Februar 2014, 09:52:57
Und hierzu noch bitte kurz zur Info für mich "or" funktioniert nicht - oder?

natürlich funktioniert "or" in der Bedingung sowie jeder andere Operator aus Perl.

Im ersten Post ist der Link:  http://de.selfhtml.org/perl/sprache/operatoren.htm angegeben.

Hier nochmal die vollständige Operatorenliste als Kopie:

++ -- (Inkrementieren, Dekrementieren)
** (Potenzierung)
! ~ (logische und bitweise Negation)
=~ !~ (Bindung an Seite reguläre Ausdrücke)
* / % x (Multiplikation, Division, Modulo-Operation, Zeichenkettenwiederholung)
+ - . (Addition, Subtraktion, Zeichenkettenaddition)
<< >> (Verschieben von Bits)
< <= > >= lt le gt ge (Vergleich größer/kleiner)
== != eq ne (Gleichheit/Ungleichheit)
& (bitweises UND)
| ^ (bitweises ODER - inklusiv/exklusiv)
&& (logisches UND)
|| (logisches ODER)
.. (Bereichsdefinition in Seite Listen)
?: (Seite Entweder-Oder-Bedingung)
= += -= &= ^= |= (Zuweisung)
, => (Aneinanderreihung)
not (logische Negation)
and (logisches UND)
or xor (logisches ODER (inklusiv/exklusiv)

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

satprofi

Hallo.
Klasse dein Modul. Fürs erste läufts, nur ELSE wird nicht angenommen. Muss mich abends damit einarbeiten.
Das ergibt ja ungeahnte Möglichkeiten.
THX !
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

hallo.
Wollte jetzt eine Steckdose definieren, aber irgendwas hats da:


define PAC_enough notify Pac
IF ([Pac:state] > 1500)
  (set ELRO_11111_C:FILTER=STATE!=on on)
    ELSE
      (set ELRO_11111_C:FILTER=STATE!=off off)
)


Usage: define notify IF: unknown Device: Pac Unknown command (set, try help. Unknown command ELSE, try help. Unknown command (set, try help. Unknown command ), try help.

dies funktioniert aber


define PAC_enough notify Pac IF ([Pac:state] > 1500) (set ELRO_11111_C on)


wo stehe ich da am schlauch?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

der-Lolo

Wenn du versuchst einfach so mehrzeiler in die config einzutragen liegt da das Problem...
Du solltest in den Details des notify auf DEF. Klicken und dort editieren.
Dann klappt es auch mit mehrzeilern - in der config trägt fhem dann einen / an jedem Zeitenwechsel ein.

satprofi

danke, wollte gerade mitteilen das ich fehler gefunden habe.
stark dein modul!
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Ich habe die Dokumentation im ersten Post überarbeitet.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

#131
Hi,

ich brauche für meine Rollos einen Timer, der diese Mo+Di um 13:30 Uhr hochfährt, es sei denn, es ist ein Feiertag, oder der Masterschalter ist "off".
Stimmt dafür dieser Befehl ?

Möchte das Testszenario ungern meinen Rollomotoren zumuten....

define RolloHochMoDi at *13:30 IF ([Rollo_Master:state] eq "on") ( (  IF ( (!$we) IF ($wday == 1 || $wday == 2 ) (set Rollo on-for-timer 120) ELSE() ) ELSE () ) ELSE()


Bin mir da mit den Elsen und Klammern noch nicht ganz im reinen....
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Du musst erst mal eine widerspruchsfreie Aussage formulieren:

"der diese Mo+Di um 13:30 Uhr hochfährt, es sei denn, es ist ein Feiertag"

Ein Montag oder Dienstag schließt aus, dass es ein Freitag ist.

Wenn du also nur am Montag und am Dienstag beim Schalterstatus "on" den Rollladen hochfahren willst, dann reicht schon:

define RolloHochMoDi at *13:30 IF ([Rollo_Master:state] eq "on" and ($wday == 1 or $wday == 2)) (set Rollo on-for-timer 120)


Der ELSE-Fall ist optional und muss nicht angegeben werden, wenn er nicht benötigt wird.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

Danke für Deine schnelle Antwort.

So habe ich es derzeit eingestellt, und es läuft.
Ich möchte allerdings, das die 13:30Uhr Hochfahrzeit an einem Feiertag, der auf einen Montag fällt (Ostern,Pfingsten,Rosen) ausser Kraft gesetzt wird.....

Für diese Tage benötige ich dann einen weiteren Timer, wo die Rollos um 8:30 hochfahren .... ;)
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 24 Februar 2014, 15:26:55
Danke für Deine schnelle Antwort.

So habe ich es derzeit eingestellt, und es läuft.
Ich möchte allerdings, das die 13:30Uhr Hochfahrzeit an einem Feiertag, der auf einen Montag fällt (Ostern,Pfingsten,Rosen) ausser Kraft gesetzt wird.....

Für diese Tage benötige ich dann einen weiteren Timer, wo die Rollos um 8:30 hochfahren .... ;)

wenn du deine Holiday-Datei mit Attribut holiday2we definiert hast (siehe commandref), dann kannst du $we für Feiertage abfragen.

Damit bleibt dann dein Rollladen auch an Feiertagen still:

define RolloHochMoDi at *13:30 IF ([Rollo_Master:state] eq "on" and ($wday == 1 or $wday == 2) and !($we)) (set Rollo on-for-timer 120)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF