FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: adfasses1 am 23 Oktober 2014, 14:55:33

Titel: Relaissteuerung über MCP23017
Beitrag von: adfasses1 am 23 Oktober 2014, 14:55:33
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


Titel: Antw:Relaissteuerung über MCP23017
Beitrag von: Mario67 am 23 Oktober 2014, 22:01:39
Hallo,

trifft zwar nicht direkt Deine Frage, aber Du solltest Dir trotzdem einmal http://forum.fhem.de/index.php/topic,24990.0.html (http://forum.fhem.de/index.php/topic,24990.0.html) und vor allem http://forum.fhem.de/index.php/topic,23164.0.html (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.
Titel: Antw:Relaissteuerung über MCP23017
Beitrag von: adfasses1 am 23 Oktober 2014, 23:33:41
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?
???
Titel: Antw:Relaissteuerung über MCP23017
Beitrag von: Puschel74 am 24 Oktober 2014, 11:10:42
Hallo,

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

Grüße