neuer FHEM-Befehl IF

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

Vorheriges Thema - Nächstes Thema

rrr

Kann man nicht mehrere IF's in einem notify hintereinander schreiben?

Beim diesem notify:
define n_Multimedia_PowerOff notify n_Multimedia_PowerOff
IF ([wz_avr:power] eq "on") (
set wz_avr off
)
IF ([wz_satpvr:power] eq "on") (
IF ([wz_satpvr:recordings] > 0)
(set wz_satpvr off)
ELSE
(set wz_satpvr shutdown)
)
IF ([wz_Kodi:system] eq "wake")
(set wz_Kodi off)



erhalte ich folgenden Fehler im Log:
n_Multimedia_PowerOff return value: IF: expected ELSE: IF ([wz_satpvr:power] eq "on") ( IF ([wz_satpvr:recordings] > 0) (set wz_satpvr off) ELSE (set wz_satpvr shutdown) ) IF ([wz_Kodi:system] eq "wake") (set wz_Kodi off)

Brockmann

Zitat von: rrr am 22 September 2015, 05:10:49
Kann man nicht mehrere IF's in einem notify hintereinander schreiben?
Klar, aber das sind dann mehrere unabhängige Befehle und die werden bei FHEM üblicherweise durch ; getrennt.

Simon74

Mein DEF funktioniert so seit einem der letzten Updates nicht mehr:
t5.eg.bm:motion
IF ($we ne "1" and $hms gt "07:30" and $hms lt "20:30" and [Personen] ne "absent" and [t5.eg.ts] eq "locked")
  (set t5.eg.ts unlock;;define at.wetter at +00:00:04 {speakWetterVorhersage(1)})


Wenn ich die Wochenendabfrage rausnehme funktionierts:
t5.eg.bm:motion
IF ($hms gt "07:30" and $hms lt "20:30" and [Personen] ne "absent" and [t5.eg.ts] eq "locked")
  (set t5.eg.ts unlock;;define at.wetter at +00:00:04 {speakWetterVorhersage(1)})


Was hat sich an dieser Syntax geändert ?

mupko

Hallo,
ich versuche mich gerade reinzulesen, werde aber nicht schlau....

ich versuche in meinen 5 Geräte Kombi Code "Fernsehen ein/aus" einzufügen, dass das Rollo nur in der Zeit von 9 Uhr bis 16 Uhr morgens hochfährt

so:

define StartingFernsehen notify HarmonyHub.currentActivity:.starting.Fernsehen set Rolladen_03_Leinwand off;;set Leinwandaktor down 100
attr StartingFernsehen room 04__Wohnen,Homekit
define StartingFernsehenAus notify HarmonyHub.currentActivity:.PowerOff set Rolladen_03_Leinwand on;;set Leinwandaktor up 100

fährt das Rollo immer hoch!

habe es so getestet:

define StartingFernsehen notify HarmonyHub.currentActivity:.starting.Fernsehen set Rolladen_03_Leinwand off;;set Leinwandaktor down 100
attr StartingFernsehen room 04__Wohnen,Homekit
define StartingFernsehenAus notify HarmonyHub.currentActivity:.PowerOff set Rolladen_03_Leinwand on { if (($wday == 0) || ($wday == 1) || ($wday == 2) || ($wday == 3) || ($wday == 4) || ($wday == 5) || ($wday == 6) && (($hour >= 8 || $hour < 16))) { fhem("set Rolladen_03_Leinwand up") } };;set Leinwandaktor up 100

aber irgendwo ist ein Fehler, denn so fährt es zu keiner Uhrzeit hoch :-(
hab mich reingelesen, finde aber keine genaue Definition für mein Beispiel!
Es soll an allen Wochentagen zwischen 8 und 16 Uhr hochfahren und sonst nicht!
Ist denke ich gar nicht so schwer und gibt mehrere Varianten dies zu realisieren aber ich komm nicht weiter gerade!

JoeALLb

Ehrlich gesagt würde ich Dir zu DOIF raten. Wäre das eine Option für Dich?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

ab morgen neue Version:

Zitat aus der Commandref:

Zitatsleep kann mit Komma verwendet werden, dabei wirkt das sleep nicht blockierend:

define check at *10:00 IF ([indoor] eq "on") (sleep 2,set lampe1 on,sleep 3,set lampe2 on)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

Hallo Damian,

wäre es auch möglich, das neue $self von DOIF auch fürs IF zu ermöglichen? Ich würde das häufiger bei Userreaings benötigen...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Zitat von: JoeALLb am 03 Januar 2017, 14:50:52
Hallo Damian,

wäre es auch möglich, das neue $self von DOIF auch fürs IF zu ermöglichen? Ich würde das häufiger bei Userreaings benötigen...

Das geht leider nicht, da IF nur ein Befehl ist und kein Modul, daher hat es keinen Namen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

Zitat von: Damian am 03 Januar 2017, 15:15:10
Das geht leider nicht, da IF nur ein Befehl ist und kein Modul, daher hat es keinen Namen.
Ach verstehe, dann wäre wohl [$name:reading] die richtige Nutzung? Danke für die rasche Antwort!!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Du kannst die Kürzel nehmen, die im jeweiligen Modul bekannt sind, wenn du IF in Kombination mit DOIF benutzt, kannst du selbstverständlich $SELF überall einsetzen, wenn du IF in Kombination mit notify nutzt, dann musst du die Platzhalter nehmen, die notify zur Verfügung stellt, z. B. $NAME
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SebastianFL

Hallo,

ich habe gerade die ersten Geräte hier im FHEM eingebunden. Darunter folgende:

ONKYO_AVR
mehrere SIRD
LG Fernseher
Harmony hub
usw. eben alles was irgendwie über Netzwerk zu erreichen ist.

Nun möchte ich, dass, wenn ich einen SIRD Hifi Adapter einschalte, der Onkyo automatisch au den richtigen Eingang geschaltet wird.

Wenn ich das richtig verstanden habe, dann kann man das mit einem IF- Befehl in einem notify machen?

Wohnzimmer:power|Wohnzimmer:power:.* \ IF ([Wohnzimmer:power] eq "on") (set WohnzimmerAVR on)\ ELSE\ (set WohnzimmerAVR off)

Das habe ich in den DEF von einem notify geschrieben, aber es reagiert einfach nicht drauf.

Wenn ich nur diese kleine Zeile reinschreibe, dann reagiert er, aber dabei ist es ja egal ob der HIFI- Adapter eingeschaltetist oder nicht
Wohnzimmer:power:.* set WohnzimmerAVR input phono

Wie muss denn die DEF aussehen, damit ich dieses Problem gelöst bekomme?

Borkk

Hallo Zusammen,

ich bin gerade ein wenig am verzweifeln. Ich habe mit IF schon eine ganze reihe an Notifys realisiert und alle laufen prima. Aufgrund des einfacheren Codes, ändere ich auch Schritt für Schritt alte Perl Notify in IF´s. Wie gesagt immer erfolgreich.

Nun scheitere ich an einer mini Sache...

ka_wm_strom:.*
IF ([ka_wm_strom] > 45) (
   (IF ([ka_wm]) eq "off")
        (set ka_wm on, set bd_luefter on, msg |Waschmaschine| läuft)
)


Wenn der Stromzähler an der Waschmaschine erkennt das sie läuft (Strom >45) und der Dummy ka_wm auf off steht, soll der Dummy auf on gestellt werden und der Lüfter eingeschaltet werden. Lief in Perl ohne Probleme aber der o.g. Code, schreibt alles was nach set ka_wm kommt in den Dummy also in diesem Fall "on, set bd_luefter on, msg |Waschmaschine| läuft". Aus welchem Grund auch immer, wird das Komma nicht interpretiert. Ein ";" bringt aber auch nichts. Ich habe schon andere IF´s laufen wo eine Befehlskette mit "," getrennt problemlos abgearbeitet wird.

Hat jemand eine Idee?
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

JoeALLb

Befehle werden durch ; getrennt. Ggf ;;.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Komma ist schon richtig, du hast eine Klammer auf zu viel :)

PS: Da hast du aber einen alten Thread wieder rausgekramt :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Borkk

#374
Zitat von: Damian am 15 November 2019, 11:35:58
Komma ist schon richtig, du hast eine Klammer auf zu viel :)

PS: Da hast du aber einen alten Thread wieder rausgekramt :)

Oh man.. Manchmal sieht man den Baum... :-) Vielen Dank.

ja der Thread ist alt, aber man landet hier wenn man nach IF FHEM sucht und es hat ja auch prima geklappt.

Nochmal danke für die schnelle Hilfe.

So klappt es jetzt natürlich (waren sogar zwei Klammern zuviel, deshalb bin ich beim durchzählen nicht drauf gestoßen);
ka_wm_strom:.*
IF ([ka_wm_strom] > 45) (
   IF ([ka_wm] eq "off")
      (set ka_wm on, set bd_luefter on, msg |Waschmaschine| läuft))
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...