EspEasy, Rules und der 6-fach-Schalter

Begonnen von BorisKsoll, 08 Februar 2020, 23:06:51

Vorheriges Thema - Nächstes Thema

BorisKsoll

Moin,

ich mache gerade meine ersten Gehversuche mit Rules:

Für eine Fernbedienung im SteamPunk-Design verwende ich einen 6-fach Knebelschalter - von sechs Schaltern sind also immer 5 offen und einer geschlossen.

Die sechs Anschlüsse gehen jeweils auf einen Pin einer MCP23018.

Jeder von Ihnen hat einen Task als Switch-Input MCP23017 mit den Namen Knebelschalter-x und den passenden Port.

Es gibt eine Dummy-Device mit der Tasknummer 1, in der in der Variablen 1 der Zustand des Schalters gespeichert werden soll.

Wenn ich von 1->2 schalte, von 2->3, von 3->2 und von 2->1 schalte, ist immer der Kontakt 2 dabei, weswegen ich mit

on Knebelschalter-2#State do
if [Knebelschalter-1#State]=1
   MCPGPIO,12,1
    TaskValueSet,2,1,1
    LCD,2,1,Hallo
else
   MCPGPIO,12,0
endif
if [Knebelschalter-2#State]=1
    TaskValueSet,2,1,2
endif
if [Knebelschalter-3#State]=1
    TaskValueSet,2,1,3
endif   
enddo


die ersten drei Schaltstufen erfassen kann. (Bei Stufe 1 schalte ich zu Testzwecken noch eine LED)

Mit

on Knebelschalter-2#State do
if [Knebelschalter-1#State]=1
   MCPGPIO,12,1
    TaskValueSet,2,1,1
    LCD,2,1,Hallo
else
   MCPGPIO,12,0
endif
if [Knebelschalter-2#State]=1
    TaskValueSet,2,1,2
endif
if [Knebelschalter-3#State]=1
    TaskValueSet,2,1,3
endif   
enddo

on Knebelschalter-4#State do
if [Knebelschalter-3#State]=1
    TaskValueSet,2,1,3
endif
if [Knebelschalter-4#State]=1
    TaskValueSet,2,1,4
endif
if [Knebelschalter-5#State]=1
    TaskValueSet,2,1,5
endif
enddo


Bekomme ich alle Schaltstellungen von 1-5.

Mit

on Knebelschalter-2#State do
if [Knebelschalter-1#State]=1
   MCPGPIO,12,1
    TaskValueSet,2,1,1
    LCD,2,1,Hallo
else
   MCPGPIO,12,0
endif
if [Knebelschalter-2#State]=1
    TaskValueSet,2,1,2
endif
if [Knebelschalter-3#State]=1
    TaskValueSet,2,1,3
endif   
enddo

on Knebelschalter-4#State do
if [Knebelschalter-3#State]=1
    TaskValueSet,2,1,3
endif
if [Knebelschalter-4#State]=1
    TaskValueSet,2,1,4
endif
if [Knebelschalter-5#State]=1
    TaskValueSet,2,1,5
endif
enddo

on Knebelschalter-6#State do
if [Knebelschalter-5#State]=1
    TaskValueSet,2,1,5
endif
if [Knebelschalter-6#State]=1
    TaskValueSet,2,1,6
endif
enddo


bekomme ich aber NICHT die Stufe 6, die Dummyvariable verbleibt bei 5. Was kann bei Copy&Paste schief gehen? Wo ist mein Denkfehler?

Am liebsten würde ich nur mit einen on/do/enddo arbeiten - aber wie sähe dann der Trigger aus? Gibt es einen Trigger, mir dem ich jede Veränderung an den Eingängen des MCP "erwischen" kann? (Ginge es, einen Interrupt des MCP auf einen PIN des 8266 zu legen und diesen zu triggern?)


Liebe Grüße & besten Dank
Boris

lambi

Hallo Boris,

eine Antwort auf Deine Frage kann ich leider auch nicht geben, aber einen elternativen Vorschlag zum Aufbau Deiner Rules.
Ich würde den Trigger mit dem "1"-Zustand definieren, um die Rules eindeutiger zu gestalten:

...
on Knebelschalter-3#State=1 do
    TaskValueSet,2,1,3
endon
on Knebelschalter-4#State=1 do
    TaskValueSet,2,1,4
endon
...