Webcmd on:off subroutine

Begonnen von dkalass, 08 Dezember 2018, 13:55:48

Vorheriges Thema - Nächstes Thema

dkalass

Hallo,
ich möchte 2 sub's (eine schaltet ein, eine aus)über webcmd on:off steuern
wie kann ich das lösen?

rudolfkoenig

Dummy mit setList definieren, und per notify auf die ausgeloesten Events reagieren (siehe Event-Monitor)

Otto123

Hi,

als Ergänzung, ich hatte das hier mal aufgeschrieben. Vielleicht hilft es.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

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

Damian

#4
oder einfach:

defmod my DOIF (1) {myfunction1()} DOELSEIF (1) {myfunction2()}
attr my cmdState on|off
attr my setList on off



myfunction1 wird ausgeführt wenn man auf on klickt, myfunction2, wenn man auf off klickt.

Man kann auch myfunction1, myfunction2 ausführen, wenn  man
set my on bzw. set my off aufruft.

Wenn man in den Bedingungen statt 1 irgendeine Bedingung angibt, wird zusätzlich myfunction1 bzw. myfunction2 ausgeführt, wenn diese Bedingung wahr wird. Das kann ein bestimmtes Ereignis sein oder ein Zeittrigger.


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

Damian

Und so hat man sogar eigene Funktionen im gleichen Modul definiert. Im Gegensatz zu myUtils braucht man sich keine Sorgen zu machen bestehende Funktionen in FHEM zu überschreiben, weil sie sich hier im gekapselten Namensraum befinden.

defmod di_web DOIF subs {\
sub myfunction1 {\
fhem_set"lamp on";;\
}\
sub myfunction2 {\
fhem_set"lamp off";;\
}\
}\
{["$SELF:on"];;myfunction1}\
{["$SELF:off"];;myfunction2}

attr di_web setList on off
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo Damian und alle anderen
jetzt wollte ich das auf die schnelle mal "nachmachen" - aber der Teufel steckt wohl im Detail.
1. Versuch - klappt nicht
defmod SamsungMusik DOIF subs {\
sub myfunction1 {\
fhem_set"set SamsungHandy sendIntent org.smblott.intentradio.PLAY url http://mp3channels.webradio.antenne.de/fresh";;\
}\
sub myfunction2 {\
fhem_set"set SamsungHandy sendIntent org.smblott.intentradio.STOP url http://mp3channels.webradio.antenne.de/fresh";;\
}\
}\
{["$SELF:on"];;myfunction1}\
{["$SELF:off"];;myfunction2}

attr SamsungMusik setList on off

2. Versuch ohne das vermuttlich überflüssige "set"
defmod SamsungMusik DOIF subs {\
sub myfunction1 {\
fhem_set"SamsungHandy sendIntent org.smblott.intentradio.PLAY url http://mp3channels.webradio.antenne.de/fresh";;\
}\
sub myfunction2 {\
fhem_set"SamsungHandy sendIntent org.smblott.intentradio.STOP url http://mp3channels.webradio.antenne.de/fresh";;\
}\
}\
{["$SELF:on"];;myfunction1}\
{["$SELF:off"];;myfunction2}
}\
attr SamsungMusik setList on off

Ich bekomm mit beiden Versionen die Fehlermeldung:
SamsungMusik DOIF: syntax error at (eval 16778) line 2, near "\
sub myfunction1 "
syntax error at (eval 16778) line 4, at EOF
syntax error at (eval 16778) line 7, at EOF
: error in defs block

Das kann ich aber leider überhaupt nicht umsetzen.  (diese kompakte Weise hätte mir gut gefallen)
Die Befehle direkt eingegeben mit:
set SamsungHandy sendIntent org.smblott.intentradio.PLAY url http://mp3channels.webradio.antenne.de/fresh
  schalten das Internetradio an/ bzw. bei STOP aus.
Über einen guten Tip würd ich mich sehr freuen.
Schöne Grüße
Elmar 
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Damian

Das ist eine Rawdefinition. Hier habe ich beschrieben, wie man eine Rawdefinition übernimmt: https://forum.fhem.de/index.php/topic,42209.msg859576.html#msg859576
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo Damian
VIELEN DANK - es klappt  ;D ;D ;D ;D ;D
ich hatte es jetzt (auch vorhin schon mal) in das "Raw definition" geschrieben.
Nach dem Execute Commant hat sich nur nichts im DEF Fenster getan.
Erst nachdem man das Device wieder aufruft steht das plötzlich an der richtigen Stelle.

Noch mal Dankeschön.
Schöne Grüße
elmar
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Damian

#9
Wenn du deine Funktionen irgendwann auch automatisiert aufrufen möchtest, brauchst du nur noch die Definiton z. B.

{["$SELF:on"];;myfunction1}

erweitern z. B.:

{if (["$SELF:on"] or [mydummy] eq "on" or [10:00]) {myfunction1}}

Ebenfalls bietet es sich an mit Funktionsparametern zu arbeiten, dann kommst du mit weniger Funktionen aus, z. B.

{["$SELF:on"];;myfunction("PLAY")}
{["$SELF:off"];;myfunction("STOP")}


Hier kannst du die Vorgehensweise genauer nachlesen (unter eigene Funktionen) : https://fhem.de/commandref_DE.html#DOIF_Perl_Modus
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF