Rolladen Steuerung mittels MCP23017 und Taster

Begonnen von IPPhoner2b, 09 November 2014, 15:27:10

Vorheriges Thema - Nächstes Thema

IPPhoner2b

Hallo zusammen,
ich hoffe ihr könnt mir weiterhelfen.
Durch den User @klausw wurde ein Plugin geschrieben, mit dessen Hilfe man einen I2C MCP23017 mit 16 Ein/Ausgängen an den Raspi anklemmen und ansteuern kann.
http://forum.fhem.de/index.php/topic,23164.0.html

Das klappt auch soweit, allerdings braucht ich jetzt eure Hilfe bzgl der Programmierung.

Vorhandenes:
- Schalter für Rollo als Eingang PortB0 und PortB1 am MCP (Schalter können in Hoch oder Runterstellung einrasten!!)
- Ausgang für Rollo PortA0 und PortA1

Folgende Dinge sollen berücksichtigt werden:
- Hoch und Runterfahren über Sonnenauf- und Untergangstimer
- Die Schalter sollen abgefragt werden, wenn z.B. Taste "Hoch" (Eingang PortB0) eingedrückt ist, darf das Rollo nicht runter fahren. (Terrassentür)
- Wenn der jeweilige Ausgang gesetzt wird, muss der andere vorher deaktiviert werden, und dazwischen eine Pause von 0,5 sek sein.
- Der Ausgang soll nach 30 sek wieder deaktiviert werden, um das Rollo wieder frei zu geben.

Klausw hat mir schon einen Tip gegeben, allerdings komme ich damit nicht so gut klar
define act_on_rolladentimer notify rolladentimer {\
  if ("$EVENT" eq "down") {\
    my $svar = ReadingsVal("Rollladenschalter","state",0);;\
    if ($svar ne "up") {fhem "set Rolladen down";;}\
  }\
}


Könnt ihr mir da weiterhelfen? Bin was das angeht scheinbar sehr Begriffsstuzig  ::) :o

Vielen Dank im Voraus.

klausw

Zitat von: IPPhoner2b am 09 November 2014, 15:27:10
Könnt ihr mir da weiterhelfen? Bin was das angeht scheinbar sehr Begriffsstuzig  ::) :o

meistens liegt es ja an Kleinigkeiten wenn man was nicht versteht  8)
Woran hängt es denn bei dem Code?


Ich habe nochmal nachgedacht (muss nicht stimmen ;)):
Pro Rolladen benötigst Du einen Dummy und ein dazugehöriges notify:

define Rolladen1 dummy
attr Rolladen1 room Rolladen
attr Rolladen1 setList hoch:noArg runter:noArg stop:noArg
attr Rolladen1 webCmd hoch:stop:runter
define act_on_Rolladen1 notify Rolladen1 {\
if ("%" eq "runter") {\
my $svar = ReadingsVal("Pin11","state",0);;\
    if ($svar ne "on") {\
fhem "set Pin12 off";;\
    fhem "define roll_down at +00:00:01 set Pin16 on-for-timer 30";;\
    fhem "setstate Rolladen1 runterfahren";;\
    fhem "define roll_clos at +00:00:31 setstate Rolladen1 geschlossen";;\
}\
} elsif ("%" eq "hoch") {\
fhem "set Pin16 off";;\
    fhem "define roll_hoch at +00:00:01 set Pin12 on-for-timer 30";;\
fhem "setstate Rolladen1 hochfahren";;\
    fhem "define roll_oben at +00:00:31 setstate Rolladen1 geoeffnet";;\
} elsif ("%" eq "stop") {\
fhem "set Pin16 off";;\
    fhem "set Pin12 off";;\
    fhem "setstate Rolladen1 gestoppt";;\
} \
}


Pin16 ist das Relais für runter
Pin12 ist das Relais für hoch
Pin11 ist der Schalterkontakt für hoch
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hallo Klaus,

Ich danke dir schon mal wieder vorab, für die Hilfe, die du mir entgegen bringst.  Wenn ich Zeit habe, werde ich mich auch direkt darum kümmern, und wenn das irgendwann einmal läuft, sagst mir, wie ich mich bei dir mal bedanken kann  ::) ;)

IPPhoner2b

#3
Hallo Klaus,

schonmal Besten Dank vorab, also nach ein bissl umdenken hat es geklappt, weil eben leider ja die Ausgänge vom MCP Invers angesteuert werden, das ist ja immer das üble, man stellt ihn auf OFF, und die LED geht an.  ;D

Wenn ich das richtig deute, ist diese Sequenz nur Zuständig für das WebIf, oder?
Also müsste ich noch einen Befehl für den Schalter, und einen Befehl für die Zeitschaltung setzen, oder?
Kann man den "Rolladen1" Befehl denn für alle 3 Szenarien verwenden, oder muss ich für 1 Rollo dann mit 3 unterschiedlichen Namen arbeiten?
Also Rollo1.Web, Rollo1.Schalter und Rollo1.Zeit?


Oder könnte man in diesem Skript noch ansetzen, bzgl der Zeitschaltung und der Schalterüberwachung?

Achja, noch eine kleinigkeit, wenn der Rolladen hochgefahren ist, steht im Web-If immernoch "hochfahren".
Wenn ich den Browser aktualisiere steht "hochgefahren". Wie konnte man das nochmal einstellen?

Achja, bevor ich es vergesse, habe es mit deiner neusten MCP Version durchgeführt.

Hier nochmal das umgeänderte, dann passt es für den MCP mit der Schalterüberwachung
define Rolladen1 dummy
attr Rolladen1 room Rolladen
attr Rolladen1 setList hoch:noArg runter:noArg stop:noArg
attr Rolladen1 webCmd hoch:stop:runter
define act_on_Rolladen1 notify Rolladen1 {\
if ("%" eq "runter") {\
my $svar = ReadingsVal("Pin11","state","on");;\
    if ($svar ne "off") {\
fhem "set Pin12 on";;\
    fhem "define roll_down at +00:00:01 set Pin16 off-for-timer 5";;\
    fhem "setstate Rolladen1 runterfahren";;\
    fhem "define roll_clos at +00:00:06 setstate Rolladen1 geschlossen";;\
}\
} elsif ("%" eq "hoch") {\
fhem "set Pin16 on";;\
    fhem "define roll_hoch at +00:00:01 set Pin12 off-for-timer 5";;\
fhem "setstate Rolladen1 hochfahren";;\
    fhem "define roll_oben at +00:00:06 setstate Rolladen1 geoeffnet";;\
} elsif ("%" eq "stop") {\
fhem "set Pin16 on";;\
    fhem "set Pin12 on";;\
    fhem "setstate Rolladen1 gestoppt";;\
} \
}

klausw

#4
Zitat von: IPPhoner2b am 11 November 2014, 20:16:09
schonmal Besten Dank vorab, also nach ein bissl umdenken hat es geklappt, weil eben leider ja die Ausgänge vom MCP Invers angesteuert werden, das ist ja immer das üble, man stellt ihn auf OFF, und die LED geht an.  ;D
nutzt Du nicht schon die inverse Logik? Die sollte beide zustände doch vertauschen.

Zitat von: IPPhoner2b am 11 November 2014, 20:16:09
Wenn ich das richtig deute, ist diese Sequenz nur Zuständig für das WebIf, oder?
Also müsste ich noch einen Befehl für den Schalter, und einen Befehl für die Zeitschaltung setzen, oder?
Kann man den "Rolladen1" Befehl denn für alle 3 Szenarien verwenden, oder muss ich für 1 Rollo dann mit 3 unterschiedlichen Namen arbeiten?
Also Rollo1.Web, Rollo1.Schalter und Rollo1.Zeit?
Für die Zeitschaltung musst Du ein "at" definieren, das dann ein "set Rolladen1 hoch" usw. auslöst
Für die Schalterüberwachung kannst du ein "notify" für Deinen mcp_20 schreiben (der "hoch" Eingang muss dann Pin11 aus meinem Beispiel sein).
bei Pin11 musst du sowas wie ReadingsVal("mcp_20","PortB1","on") haben
Ich würde aber einen readingsproxy anlegen. Dann hast du den Schalter auch schön in der Weboberfläche visualisiert und das notify dafür ist recht übersichtlich.
In meinem Dummyscriptbeispiel geht das nicht. Die Funktionen müssen aufgeteilt werden
Zitat von: IPPhoner2b am 11 November 2014, 20:16:09

Achja, noch eine kleinigkeit, wenn der Rolladen hochgefahren ist, steht im Web-If immernoch "hochfahren".
Wenn ich den Browser aktualisiere steht "hochgefahren". Wie konnte man das nochmal einstellen?


das muss man setreadings nehmen...mein fehler

Rolladen1 {
    fhem ("delete roll_down") if (Value("roll_down") ne "");
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");
    fhem ("delete roll_down") if (Value("roll_down") ne "");
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");
if ("$EVENT" eq "runter") {
my $svar = ReadingsVal("Pin11","state",0);
    if ($svar eq "on") {
fhem "set Pin12 off";
    fhem "define roll_down at +00:00:01 set Pin16 on-for-timer 10";
    fhem "setreading Rolladen1 state runterfahren";
    fhem "define roll_clos at +00:00:11 setreading Rolladen1 state geschlossen";
}
} elsif ("$EVENT" eq "hoch") {
    fhem "set Pin16 off";
    fhem "define roll_hoch at +00:00:01 set Pin12 on-for-timer 10";
    fhem "setreading Rolladen1 state hochfahren";
    fhem "define roll_oben at +00:00:11 setreading Rolladen1 state geoeffnet";
} elsif ("$EVENT" eq "stop") {
    fhem "set Pin16 off";
    fhem "set Pin12 off";
    fhem "setreading Rolladen1 state gestoppt";
}
}

So wird der STATE aktualisiert.
Ausserdem werden die Timer vorher gelöscht..sonst kommen die sich in die Quere
Hast du readingsproxy angelegt die Pinxx heissen?
So allein funktionert das Beispiel ja nicht.
Auch on-for-timer geht nicht mit dem MCP Modul

Edit:
Anmerkung von Puschel umgesetzt.
Danke für den Hinweis, Copy und Paste von alten Codeschnipseln ist halt nur bedingt hilfreich  ::)
@IPPhoner2b:
Wenn Du mehrere Rolläden steuern willst, kannst du das Notify auch so abändern, das es für alle Rolläden gilt:
Rolladen1 -> Rolladen.*
Die Ausgänge müssen umbenannt werden: z.B. Pin12 -> Rolladen1hoch
Im Notify sieht das dann so aus:
fhem "set Pin12 on"; -> fhem "set ".$NAME."hoch off";
Und nicht zu vergessen, die Timer:
fhem ("delete roll_down") if (Value("roll_down") ne ""); -> fhem ("delete ".$NAME."_down") if (Value("".$NAME."_down") ne "");
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Puschel74

Hallo,

und auch hier der kurze Einwurf:
% gegen $EVENT und @ gegen $NAME zu tauschen.
NOCH funktioniert @ und % aber nur Rudi weiß bis wann er das ausbaut.

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.

IPPhoner2b

Hallo ihr beiden,
Danke für die Tatkräftige Unterstützung,

habe den geändert Code übernommen, allerdings habe ich eine Frage, ich muss bei allen Zeilen entweder ein ";\" oder ein ";" hinzufügen, sonst klappte das nicht. In deinem ersten Beispiel hattest du die ja auch drin, wurden die nur vergessen, oder gibt es einen Grund, warum es nicht klappte  :o ;)

Die Benennungen habe ich natürlich dementsprechend angepasst.

Das mit dem Status wird jetzt richtig übernommen, wie könnte ich denn folgendes Einsetzen?
Wenn der Schalter gedrückt ist, darf das Rollo ja nicht fahren, das klappt ja soweit auch, allerdings schreibt er ja runterfahren, da wäre gut, wenn der Text kommt "Schalter betätigt" oder so.

Habe die Schalter jetzt auch mit reingenommen, dass dann das Rollo fährt, und läuft alles über deinen Dummy, also das klappt schonmal.
Alle Rolläden wollte ich per Zeitschaltung eh nicht gleichzeitig fahren lassen, sondern so um ein paar Sekunden versetzt.

So sieht es momentan aus mit den Zuordnungen: (Den Code für die Ein und Ausgänge habe ich von LinusD übernommen (Glaube, er war es *g*)
Könnt ihr euch den Teil für die Zeitschaltung nochmal ansehen, ob das so richtig ist? (Meckern tut er nicht, aber ist ja Zeitlich immer so eine Sache, wenn man das nicht kennt *g*)

Schaut mal drüber, für Hilfe bin ich immer dankbar, habe mir nämlich jetzt aus mehreren Ecken was zusammengebastelt, und da kann ja immer Verbesserungspotential sein. ;D
###Sensoren (Input)####

#--Bank-B--#
#(S)chalter (K)üchenrollo (li)nks (H)och          ###(S K LI H)###
define sklih readingsProxy mcp_20:PortB0
attr sklih event-on-change-reading state
attr sklih group InputPorts
attr sklih valueFn {($VALUE eq "on")?"off":"on"}

#(S)chalter (K)üchenrollo (li)nks (R)unter        ###(S K LI R)###
define sklir readingsProxy mcp_20:PortB1
attr sklir event-on-change-reading state
attr sklir group InputPorts
attr sklir valueFn {($VALUE eq "on")?"off":"on"}

#(S)chalter (K)üchenrollo (re)chts (H)och         ###(S K RE H)###
define skreh readingsProxy mcp_20:PortB2
attr skreh event-on-change-reading state
attr skreh group InputPorts
attr skreh valueFn {($VALUE eq "on")?"off":"on"}

#(S)chalter (K)üchenrollo (re)chts (R)unter       ###(S K RE R)###
define skrer readingsProxy mcp_20:PortB3
attr skrer event-on-change-reading state
attr skrer group InputPorts
attr skrer valueFn {($VALUE eq "on")?"off":"on"}

####Aktoren (Output)####
#--Bank-A--#

#(A)usgang (K)üchenrollo (li)nks (H)och         ###(A K LI H)###  PORT A0
define aklih readingsProxy mcp_20:PortA0
attr aklih alias A0 Rollo Küche links Hoch
attr aklih eventMap on:aus off:an
attr aklih group OutputPorts
attr aklih setFn {($CMD eq "on")?"PortA0 off":"PortA0 on"}
attr aklih setList off on
attr aklih valueFn {($VALUE eq "on")?"off":"on"}

#(A)usgang (K)üchenrollo (li)nks (R)unter       ###(A K LI R)###  PORT A1
define aklir readingsProxy mcp_20:PortA1
attr aklir alias A1 Rollo Küche links Runter
attr aklir eventMap on:aus off:an
attr aklir group OutputPorts
attr aklir setFn {($CMD eq "on")?"PortA1 off":"PortA1 on"}
attr aklir setList off on
attr aklir valueFn {($VALUE eq "on")?"off":"on"}

#(A)usgang (K)üchenrollo (re)chts (H)och         ###(A K RE H)###  PORT A2
define akreh readingsProxy mcp_20:PortA2
attr akreh alias A2 Rollo Küche rechts Hoch
attr akreh eventMap on:aus off:an
attr akreh group OutputPorts
attr akreh setFn {($CMD eq "on")?"PortA2 off":"PortA2 on"}
attr akreh setList off on
attr akreh valueFn {($VALUE eq "on")?"off":"on"}

#(A)usgang (K)üchenrollo (re)chts (R)unter       ###(A K RE R)###  PORT A3
define akrer readingsProxy mcp_20:PortA3
attr akrer alias A3 Rollo Küche rechts Runter
attr akrer eventMap on:aus off:an
attr akrer group OutputPorts
attr akrer setFn {($CMD eq "on")?"PortA3 off":"PortA3 on"}
attr akrer setList off on
attr akrer valueFn {($VALUE eq "on")?"off":"on"}
#attr akrer room Küche

######### Rollade per Schalter fahren
define aklihNotify notify sklih set Rolladen1 hoch
define aklirNotify notify sklir set Rolladen1 runter

######### Rollade rauf
define Rolladen1_auf_WE at *08:00 {if ($we) {fhem("set Rolladen1 hoch")}}
define Rolladen1_auf_Woche at *07:00 {if (!$we){fhem("set Rolladen1 hoch")}}

######### Rollade runter
define Rolladen1_ab at *{sunset("HORIZON=-6",300,"17:00","22:00")} set Rolladen1 runter

define Rolladen1 dummy
attr Rolladen1 room Rolladen
attr Rolladen1 setList hoch:noArg runter:noArg stop:noArg
attr Rolladen1 webCmd hoch:stop:runter
define act_on_Rolladen1 notify Rolladen1 {\
    fhem ("delete roll_down") if (Value("roll_down") ne "");;\
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");;\
    fhem ("delete roll_down") if (Value("roll_down") ne "");;\
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");;\
if ("$EVENT" eq "runter") {\
my $svar = ReadingsVal("sklih","state","off");;\
    if ($svar eq "on") {\
fhem "set aklih aus";;\
    fhem "define roll_down at +00:00:01 set aklir off-for-timer 5";;\
    fhem "setreading Rolladen1 state runterfahren";;\
    fhem "define roll_clos at +00:00:06 setreading Rolladen1 state geschlossen";;\
}\
} elsif ("$EVENT" eq "hoch") {\
    fhem "set aklir aus";;\
    fhem "define roll_hoch at +00:00:01 set aklih off-for-timer 5";;\
    fhem "setreading Rolladen1 state hochfahren";;\
    fhem "define roll_oben at +00:00:06 setreading Rolladen1 state geoeffnet";;\
} elsif ("$EVENT" eq "stop") {\
    fhem "set aklir aus";;\
    fhem "set aklih aus";;\
    fhem "setreading Rolladen1 state gestoppt";;\
} \
}

klausw

In der cfg Datei bedeutet \, das es auf der nächsten Zeile mit dem Code weitergeht.
Das zweite ; "escaped" das Erste. Sonst wird es falsch interpretiert.
Wenn Du den Code auf der Seite des notify (findest du unter unsorted) under Def editierts hast du beides nicht.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hui,

und ich dachte schon, ich bin jetzt total durch den Wind, weil ich von deinem letzten Abschnitt nichts mehr verstanden habe, habs dann aber im WebIf gefunden, und hast recht, da sieht der Text einfacher aus *g*

Hast du denn noch einen Tipp für mich bzgl. der Meldung, dass der Schalter betätigt ist  ::) ;D

klausw

Zitat von: IPPhoner2b am 16 November 2014, 12:44:37
Hast du denn noch einen Tipp für mich bzgl. der Meldung, dass der Schalter betätigt ist  ::) ;D
Wenn du mir genau sagst, was du damit meinst.
Der Dummystate wird doch aktualisiert?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Ja das mit dem aktualisieren klappt, allerdings, wenn der Schalter belegt ist, und er nicht fahren "darf" und ich klicke dann im WebIf den Button "Runter" an, zeigt er "runterfahren" an, schaltet die Ausgänge aber nicht "scharf"
Und diese Meldung bleibt solange, bis ich eine andere Taste drücke.

Melde mich nachher nochmal, muss jetzt kurz weg

klausw

Zitat von: IPPhoner2b am 16 November 2014, 12:53:06
Ja das mit dem aktualisieren klappt, allerdings, wenn der Schalter belegt ist, und er nicht fahren "darf" und ich klicke dann im WebIf den Button "Runter" an, zeigt er "runterfahren" an, schaltet die Ausgänge aber nicht "scharf"
Und diese Meldung bleibt solange, bis ich eine andere Taste drücke.
Ah stimmt....
Du musst nur eine else Bedingung an die Schalterabfrage anhängen:


...
    if ($svar eq "on") {\
fhem "set aklih aus";;\
    fhem "define roll_down at +00:00:01 set aklir off-for-timer 5";;\
    fhem "setreading Rolladen1 state runterfahren";;\
    fhem "define roll_clos at +00:00:06 setreading Rolladen1 state geschlossen";;\
    }
    else {\
    fhem "setreading Rolladen1 state Balkontür offen";;\
    }\
...


Oder willst du ein separates Dummy Device haben?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Ne, so wie du das geschrieben hast, ist das wirklich absolut ausreichend für mich, und klappt soweit auch wunderbar.

Jetzt habe ich noch ein kleines Problem festgestellt, und zwar, wenn ich mit dem Schalter das Rollo hochfahre, geht ja nach xx sekunden der Ausgang automatisch zurück, soweit alles wie gewünscht.

Wenn ich dann den Schalter aber ausschalte, gibt es für das Rollo nochmals das Signal zum hochfahren. Habe schon getestet, den Interrupt von both auf rising zu stellen, aber das hat scheinbar keinen Erfolg gebracht.

So sieht es noch in der Config für den Chip aus:
###MCP23017-0x20###
define mcp_20 I2C_MCP23017 0x20
attr mcp_20 IODev chip
attr mcp_20 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 InterruptOut connected_active-low
attr mcp_20 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_20 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 group MCP23017
attr mcp_20 invert_input B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off



###Interrupt A&B####
define Interrupt RPI_GPIO 14
attr Interrupt active_low yes
attr Interrupt direction input
attr Interrupt group MCP23017
#attr Interrupt interrupt both
attr Interrupt interrupt rising
attr Interrupt userReadings test {fhem ("get mcp_20")}

klausw

Zitat von: IPPhoner2b am 16 November 2014, 17:02:50
Jetzt habe ich noch ein kleines Problem festgestellt, und zwar, wenn ich mit dem Schalter das Rollo hochfahre, geht ja nach xx sekunden der Ausgang automatisch zurück, soweit alles wie gewünscht.

Wenn ich dann den Schalter aber ausschalte, gibt es für das Rollo nochmals das Signal zum hochfahren. Habe schon getestet, den Interrupt von both auf rising zu stellen, aber das hat scheinbar keinen Erfolg gebracht.
Der Taster prellt sicher, also wirst du beim Schalten immer einen Interrupt sehen.
Du müsstest in define aklihNotify notify sklih eine Abfrage des Pinstatus einbauen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Super, danke hat geklappt,


Jetzt habe ich mit "2 Rollos" mal etwas rumgespielt, und habe festgestellt, dass in bestimmten Konstellationen beim umschalten auf einmal für ein Rollo beide Leds angehen, was ja fatal wäre *g*

Denke mal, dass es daran liegt, dass ich den kompletten Block mit den Timern nur kopiert habe, und eben die spezifischen Bezeichnungen angepasst habe.

Muss ich die "Timer" also roll_down roll_close irgendwie abändern?

Habe jedenfalls grade nen kleinen Schönheitsfehler gefunden, der mir ohne die Spielerei nicht aufgefallen wäre,

Bei den Timer, die gelöscht werden, steht 2x roll_down und 2x roll_clos, aber nichts von roll_hoch und roll_oben.

Rolladen1 {
    fhem ("delete roll_down") if (Value("roll_down") ne "");
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");
    fhem ("delete roll_down") if (Value("roll_down") ne "");
    fhem ("delete roll_clos") if (Value("roll_clos") ne "");
if ("$EVENT" eq "runter") {
my $svar = ReadingsVal("Pin11","state",0);
    if ($svar eq "on") {
fhem "set Pin12 off";


Aber sollte ich besser für jedes Rollo eigenständige Timerbezeichnungen nehmen?