Relaissteuerung über MCP23017

Begonnen von adfasses1, 23 Oktober 2014, 14:55:33

Vorheriges Thema - Nächstes Thema

adfasses1

Hallo,

da ich in Sachen FHEM noch relativ neu bin und die geplante Steuerungsgröße meinen Horizont (noch) übersteigt stehe ich mal wieder vor einem Problem.

Ich möchte gern ein 8-Kanal Relais über einen MCP23017 steuern, funktioniert soweit auch schon alles super, auch in FHEM.
Knackpunkt bei der Sache ist, dass ich mehrere "Buttons" in FHEM haben möchte die ich anwählen kann und dann kombiniert das Relais schalten.

Im Moment habe ich zum Testen folgenden Code-Schnipsel

define Umwaelzpumpe dummy
attr Umwaelzpumpe setList on off
define on_Umwaelzpumpe notify Umwaelzpumpe:on {\system("sudo i2cset -y 1 0x20 0x13 0x7f ")}
define off_Umwaelzpumpe notify Umwaelzpumpe:off {\system("sudo i2cset -y 1 0x20 0x13 0xff ")}


Geplant sind folgende Zustände:

K1-Umwälzpumpe
k2-Ölzeizung_Speicher
K3-Ölheizung_Heizen
K4-HK(Heizkurve)1
K5-HK2
K6-HK3
K7-HK4

Wie programmiere ich es am besten das ich über das Frontend alle möglichen Kombinationen über Buttons miteinander schalten kann (z.b K1 mit K3 und K6)

Ich hoffe ich konnte es halbwegs verständlich rüberbringen  ;D



Mario67

#1
Hallo,

trifft zwar nicht direkt Deine Frage, aber Du solltest Dir trotzdem einmal http://forum.fhem.de/index.php/topic,24990.0.html und vor allem http://forum.fhem.de/index.php/topic,23164.0.html ansehen. Damit kannst Du die System-Calls loswerden.

Die direkte Umsetzung der Button-Zustände auf die kombinierte Belegung der Ausgänge per notify endet sicher ziemlich unübersichtlich. Ich würde irgendwo eine Matrix ablegen. Das könnte man pragmatisch auch in der 99_myUtils.pm tun. Dort wäre auch eine Methode denkbar die aufgerufen durch das notify, welches durch einen der Buttons ausgelöst wurde, die zu schaltenden Kanäle in einem switch-Statement ermittelt und per fhem-Kommando auch bedient.

Gruß,
Mario

Nachtrag: Eine Signatur wäre hilfreich.
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

adfasses1

So nach einigen Stunden suchen,probieren und Basteln bin ich zu einem fast befriedigendem Ergebniss gekommen

###I2C-Device###
define i2cBus RPII2C 1
attr i2cBus group MCP23017

###MCP23017-0x20###
define icMCP23017 I2C_MCP23017 0x20
attr icMCP23017 IODev i2cBus
attr icMCP23017 InterruptOut connected_active-low
attr icMCP23017 OutputPorts B0,B1,B2,B3,B4,B5,B6,B7
attr icMCP23017 group MCP23017
attr icMCP23017 OnStartup B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off



define Umwaelzpumpe readingsProxy icMCP23017:PortB0
attr Umwaelzpumpe group OutputPorts
attr Umwaelzpumpe setFn {($CMD eq "on")?"PortB0 off":"PortB0 on"}
attr Umwaelzpumpe setList on off
attr Umwaelzpumpe valueFn {($VALUE eq "on")?"off":"on"}


Was jetzt fehlt ist ein on-for-timer den ich nicht programmiert bekomme?!

Kann mir da jemand helfen?
???

Puschel74

Hallo,

wenn das Modul keinen on-for-timer kennt hilft nur ein at.

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.