Wie die Integration des Nextion Display in FHEM erfolgt, habe ich bereits in diesem Beitrag gezeigt. Mit diesem Beitrag möchte ich die Integration des I/O Expander – PCF8574 in FHEM zeigen. Wie das Ansteuern der LEDs und das Einlesen der Taster funktioniert. Das Nextion Display wird auch genutzt um jeder LED eine Bezeichnung zu geben. So gibt die erste LED den Status der Balkonpflanzen wieder, genauer gesagt dessen Bodenfeuchtigkeit. Ist diese zu trocken, so leuchtet die LED rot auf.

Bestückung der Platine
Die fertig Bestückte Platine sieht wie folgt aus:


Die Gerber Files und die BOM sind unter folgendem Beitrag zu finden.
ESP Easy I/O Expander – PCF8574
In der Weboberfläche von ESP Easy unter dem Abschnitt Devices werden nun die Ein- und Ausgänge angelegt. Dazu einfach auf der linke Seite auf Add klicken und im Drop Down Menü Switch Input – PCF8574 auswählen.

Die Parametrierung erfolgt wie im nachfolgendem Bild gezeigt. Der Name kann frei gewählt werden und taucht auch als solches unter FHEM auf.

Der Port muss entsprechend der Beschaltung des IC PCF8574 angepasst werden. Betrachtet man das Symbol des IC (siehe Schematic unterhalb), so fängt die Zählung der Ports bei Null an (P0, P1,..). Unter ESP Easy ist es wichtig, die Zählung jedoch bei Eins zu beginnen. Daher wird in meinen Fall die LED D2 durch ESP Easy über den Port 1 gesteuert. Weiters war es notwendig das Häkchen bei Inversed Logic zu setzen. Unter Values kann wieder ein beliebiger Name vergeben werden. Dieser wird unter den Readings in FHEM sichtbar wird. Ich habe mich für den Default Wert State entschieden.

In der ESP Easy Oberfläche macht es noch keinen Unterschied, ob ein Eingang oder Ausgang vorliegt. P6 und P7 sind in meinem Fall mit einem Taster verbunden und werden somit als Eingänge genutzt.
FHEM I/O Expander – PCF8574
Für das Einrichten der ESP Bridge möchte ich auf FHEMWiki verweisen. Ist diese aktiv und unter Controllers der FHEM Server angelegt, sollte in der FHEM Weboberfläche ein neues Device angelegt worden sein. Diese sind in dem entsprechenden Raum der ESP Bridge zu finden. In meinem Fall lautet dieser ESPEasy.

Ich hab diese neuen Devices um die Attribute room und group erweitert, um so die Übersicht zu verbessern. Am Beispiel LED1 sieht diese wie folgt aus:attr ESPEasy_Status_Box_1_LED1 group Status Box
attr ESPEasy_Status_Box_1_LED1 room ESPEasy,StatusBox

Um nun die LED1 anzusteuern zu können, müssen weitere Attribute gesetzt werden. Unter dem Attribute eventMap muss auch hier wieder der korrekt Port gesetzt werden. attr ESPEasy_Status_Box_1_LED1 eventMap /pcfgpio 01 on:off/pcfgpio 01 off:on/
attr ESPEasy_Status_Box_1_LED1 presenceCheck 1
attr ESPEasy_Status_Box_1_LED1 readingSwitchText 1
attr ESPEasy_Status_Box_1_LED1 setState 3
attr ESPEasy_Status_Box_1_LED1 stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"State","")}
Für LED2 bis LED6 können die Attribute direkt übernommen. Das Attribute eventMap ist wie bereits erwähnt, an den entsprechenden Port anzupassen.
Für die Eingänge Button1 und Button2 bedarf es keiner Änderung, man könnte aber noch die Darstellung der Zustände verschönern. Dazu muss das Attribute devStateIcon wie folgt abgeändert werden:attr ESPEasy_Status_Box_1_Button1 devStateIcon .on:ios_on_fill .off:ios-off

Die Icons können aber auch auf einen anderen Weg definiert werden. Dazu einfach beim jeweiligen Device auf Extend devStateIcon klicken:

Danach kann das Suchmuster unter Enter value/regexp for STATE definiert und das entsprechende Icon ausgewählt werden:

Dies ist für alle Zustände zu wiederholen.
Beispiel – Modul DOIF
Um die LED automatisiert anzusteuern möchte ich hier ein kleines Beispiel mit dem Modul DOIF zeigen. Die LED5 (=Status der Waschmaschine) wird eingeschaltet, wenn das Device Status_Waschmaschine sein Reading status auf on setzt und umgekehrt.define di_StatusBox_LED5 DOIF ([Status_Waschmaschine:status] eq "on") (set ESPEasy_Status_Box_1_LED5 on) DOELSE (set ESPEasy_Status_Box_1_LED5 off)
attr di_StatusBox_LED5 group doif
attr di_StatusBox_LED5 room StatusBox