neuer FHEM-Befehl IF

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

Vorheriges Thema - Nächstes Thema

Damian

#90
Zitat von: kermi am 29 Januar 2014, 21:29:00
Kann an auch nach einem Zahlenbereich filtern? Also z.B. >50 <100 .
Nutzen will ich es für eine einfache Statusmeldung bei bestimmten Füllständen einer Abwassergrube:

define sensor_grube_leer notify sensor_grube IF ([sensor_grube:rawValue] < 300) (set DisplayLed_16 led off)
Hallo Stephan,

es freut mich, dass es dir hilft.

Es ist vielleicht noch nicht deutlich geworden, aber du kannst damit alles machen, was du auch in Perl machen könntest. Im Klartext, Operationen nutzen wie: and, or, eq (gleich bei Zeichenketten), ne (ungleich bei Zeichenketten), <= (keiner gleich), >= (größer gleich), == (gleich bei Zahlen), != (ungleich bei Zahlen) usw.

Ich werde es noch in die Doku aufnehmen. Für deinen Fall bedeutet das:

define sensor_grube_leer notify sensor_grube IF ([sensor_grube:rawValue] > 50 and [sensor_grube:rawValue] < 300) (set DisplayLed_16 led off)

Gruß

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

kermi

jetzt ist es mir deutlich geworden, manchmal steht man doch echt auf dem Schlauch.
Damit wird dein "IF" ja noch wesentlich mächtiger, mir fallen ja schon wieder tausend Sachen ein.

Schönen Abend noch.
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Navigator

Danke, vielen dank für die Erweiterung. Ich betreibe hauptsächlich eine XS1 und bin nur interessehalber auf FHEM gestossen.  Jetzt habe ich beide Systeme und mal versucht meine XS Konfig auf FHEM zu übertragen. Die Aktoren und Sensoren anlegen ist ja noch ein leichtes, aber die Automatisierung der Scripte die in der XS fast ausschliesslich mit IF ELSE beschrieben werden, haben mich hier fast verzweifeln lassen.

Ein Beispiel aus meiner alten Konfigurtaion.

Eine Lichtautomatik angeschlossen an FS20 Dimmer, die je nach Aussenhelligkeit und dem Status Sonnenuntergang das Licht langsam hochdimmen und sich der Helligekeit anpassen.

if(lclminofday>(sunset-60))&&(lclminofday<(sunset+60))&&(Anwesenheit==100){if(Lichtautomatik_Deko<25)&&(Helligkeit==8.4||Helligkeit==8.3){_Daem_V2.1;Lichtautomatik_Deko=25;}
if(Lichtautomatik_Deko<50)&&(Helligkeit==8.1||Helligkeit==8){_Daem_V2.2;Lichtautomatik_Deko=50;}}

Eigentlich einfach zu lesender Code, ich möchte gern mal wissen wie sowas in FHEM Perl Code aussehen könnte.

Mir ist es bis jetzt als Anfänger sebst nicht gelungen ein ähnliches Konstukt in FHEM zu realisieren, man denkt einfach immer in alten Bahnen und ich hoffe mit dieser Erweiterung wieder ein kleines Erfolgserlebnis zu haben.

Damian

Zitat von: Dittel am 02 Februar 2014, 21:07:36
Mir ist es bis jetzt als Anfänger sebst nicht gelungen ein ähnliches Konstukt in FHEM zu realisieren, man denkt einfach immer in alten Bahnen und ich hoffe mit dieser Erweiterung wieder ein kleines Erfolgserlebnis zu haben.
Ja, kann ich sehr gut nachvollziehen - auch als Perlprogrammierer.

Sobald ich etwas Zeit finde, möchte ich noch weitere typische Abfragen im IF vereinfachen. Z. B. Zeitabfrage (wird immer wieder benötigt), Abfragen von Internals (insb. Status) oder Attribute.

Gruß

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

Navigator

Danke Damian,

gibt es den Download noch oder hast du ihn wieder entfernt? Kann ihn gar nicht finden und es eigentlich kaum noch erwarten.

Damian

Zitat von: Dittel am 02 Februar 2014, 21:37:34
Danke Damian,

gibt es den Download noch oder hast du ihn wieder entfernt? Kann ihn gar nicht finden und es eigentlich kaum noch erwarten.

Solange es nicht eingecheckt ist, kannst du immer die aktuelle Version aus dem ersten Post downloaden.

Gruß

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

Navigator

Ach da unten ist es versteckt. Danke.  8)

kermi

bekomme ich dieses:

define sensor_grube_leer notify sensor_grube IF ([sensor_grube:content] > 0 and [sensor_grube:content] < 4000) (set DisplayLed_16 led off)
define sensor_grube_viertel notify sensor_grube IF ([sensor_grube:content] > 4000 and [sensor_grube:content] < 5000) (set DisplayLed_16 led green)
define sensor_grube_halb notify sensor_grube IF ([sensor_grube:content] > 5000 and [sensor_grube:content] < 6000) (set DisplayLed_16 led orange)
define sensor_grube_voll notify sensor_grube IF ([sensor_grube:content] > 6000) (set DisplayLed_16 led red)


eigentlich auch mit verschachteltem IF hin?

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

#98
Zitat von: kermi am 06 Februar 2014, 17:35:25
bekomme ich dieses:

define sensor_grube_leer notify sensor_grube IF ([sensor_grube:content] > 0 and [sensor_grube:content] < 4000) (set DisplayLed_16 led off)
define sensor_grube_viertel notify sensor_grube IF ([sensor_grube:content] > 4000 and [sensor_grube:content] < 5000) (set DisplayLed_16 led green)
define sensor_grube_halb notify sensor_grube IF ([sensor_grube:content] > 5000 and [sensor_grube:content] < 6000) (set DisplayLed_16 led orange)
define sensor_grube_voll notify sensor_grube IF ([sensor_grube:content] > 6000) (set DisplayLed_16 led red)


eigentlich auch mit verschachteltem IF hin?

Gruß
Stephan

kein Problem mit:

define sensor_grube_leer notify sensor_grube
IF ([sensor_grube:content] > 6000)
  (set DisplayLed_16 led red)
ELSE (
  IF ([sensor_grube:content] > 5000)
    (set DisplayLed_16 led orange)
  ELSE (
    IF ([sensor_grube:content] > 4000)
      (set DisplayLed_16 led green)
    ELSE
      (set DisplayLed_16 led off)
  )
)


Selbst die Einrückungen kannst du für die Übersicht,  wie in jeder höheren Programmiersprache, in der DEF-Eingabe so vornehmen.

Gruß

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

kermi

genial, super, vielen DANKE!!

so ähnlich hatte ich es 2 Tage lang mit immer leicht angeändertem Syntax probiert aber nicht hinbekommen.
Nun wusste ich auch nicht genau ob dieses mehrfache verschachteln unterstützt wird.

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

Ich würde dir empfehlen noch einen FILTER bei set zu setzen, damit du nicht jedes mal unnötig das Kommando absetzt, auch wenn sich die Zustandsanzeige nicht ändern soll.

Wenn der Zustand (state) in DisplayLed_16 red, orange oder green ist, dann könntest du z. B. einbauen:

(set DisplayLed_16:FILTER=STATE!=red led red)

damit wird der set-Befehl nur dann ausgeführt, wenn Displayled_16 seinen Zustand auch ändern soll, hier am Beispiel von red.

Gruß

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

kermi

das habe ich eigentlich am Sensor so gelöst.
attr sensor_grube event-on-change-reading battery,content,rawValue
Damit bekomme ich zumindest nur Logeinträge bei Statusänderung aber der Filter hört sich irgendwie eleganter an.

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

Zitat von: kermi am 06 Februar 2014, 22:05:12
das habe ich eigentlich am Sensor so gelöst.
attr sensor_grube event-on-change-reading battery,content,rawValue
Damit bekomme ich zumindest nur Logeinträge bei Statusänderung aber der Filter hört sich irgendwie eleganter an.

Gruß
Stephan

ja, aber wenn der Sensor z. B. von 7000 auf 7001 geht, dann wird bei dir unnötig red geschaltet.

Gruß

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

kermi

stimmt auch wieder, zwar nur bei Statusänderung aber der Bereich ist ja ziemlich groß.
Na dann werde ich mal den Filter noch setzten und Danke für den Hinweis.

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Damian

#104
Ich habe im ersten Post die Dokumentation erweitert, u. a. zu:

-mögliche Operatoren

-Nutzung mehrerer Zeilen mit Einrückung zwecks übersichtlicher Darstellung von Klammerebenen.

Gruß

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