S7 Beispielkonfiguration: Unterschied zwischen den Versionen

Aus FHEMWiki
K (ThomasRamm verschob die Seite Vorhandene Lampensteuerung ergänzen nach Siemens S5 Beispielkonfiguration: nicht eindeutiger Seitentitel)
K (Formatierungsprobleme im (neuen) Programmbeispiel behoben; @Krueuw - bitte noch mal kontrollieren (Leerzeilen raus?))
 
(95 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieser Artikel beschreibt eine Beispielkonfiguration für die SPS-Hardware [[S7|Siemens S5]]. Eine Anpassung an die S7 bzw. Logo ist mit meist sehr geringem Aufwand möglich, weil das selbe Modul verwendet werden kann. Ausgangspunkt ist eine seit 1997 gewachsene S5-95U-Haussteuerung. Inzwischen wurde diese um eine FHEM-Anbindung in einer Docker-Umgebung ergänzt. Ich ([[Benutzer:Krueuw]]) demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.
==Status von S5-Ausgängen in FHEM anzeigen (2016)==
Nachdem der FHEM-Host z.B. ein Raspberry Pi über die normale Programmierleitung wie [[Siemens_S5_Vorbemerkungen_f%C3%BCr_Einsteiger#Hardware|hier]] beschrieben verbunden ist, können auf der FHEM-Kommandozeile im WEB-Interface folgende Befehle eingegeben werden.
Bei mir wird die biologische Nachklärung des Abwassers mit einem [http://images.google.de/imgres?imgurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/images/launh.gif&imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&h=347&w=600&tbnid=wfyoztNN7sVVuM:&vet=1&tbnh=90&tbnw=156&docid=xl2wKluoAEYsmM&hl=en&client=browser-ubuntu&usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&sa=X&ved=0ahUKEwjd1KiYtIzRAhXceVAKHTf6B5sQ9QEIPDAD Launhardt-Reaktor] erledigt. Drei Pumpen werden durch die S5-Ausgänge A13.0 .. A13.2 zeitgesteuert geschaltet. In FHEM soll der Status der Ausgänge angezeigt werden. Dazu müssen nur die betreffenden Ausgänge in FHEM bekannt gemacht werden. Änderungen am S5-Programm sind nicht notwendig.
define s5test S7 S5 /dev/ttyAMA0
define Abpumpen S7_DRead outputs 0 13.0
attr Abpumpen IODev s5test
attr Abpumpen icon icoBaum
attr Abpumpen room Abwasser
attr Abpumpen sortby 03
define Umpumpen S7_DRead outputs 0 13.1
attr Umpumpen IODev s5test
attr Umpumpen icon audio_repeat
attr Umpumpen room Abwasser
attr Umpumpen sortby 02
define Zupumpen S7_DRead outputs 0 13.2
attr Zupumpen IODev s5test
attr Zupumpen icon scene_toilet_alternat
attr Zupumpen room Abwasser
attr Zupumpen sortby 01
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]
==vorhandene S5-Lampensteuerung um FHEM ergänzen==
==vorhandene S5-Lampensteuerung um FHEM ergänzen==
Das S5-Programm für das Schalten der Beleuchtung mittels Taster und zusätzlich über FHEM:
Das S5-Programm für das Schalten der Beleuchtung mittels Taster soll auch bei ausgefallenem FHEM funktionieren wie bisher. Dazu schaltet FHEM spezielle Merker, die dann per ODER mit den anderen Eingängen verknüpft werden, hier Merker M 65.0 (vier ergänzte Zeilen):


  NETZWERK  12          Arbeitszimmer
  NETZWERK  12          Arbeitszimmer
Zeile 27: Zeile 56:
  00C2      :NOP 0  
  00C2      :NOP 0  
           :***
           :***
zugehörige FHEM-Konfiguration:
'''zugehörige FHEM-Konfiguration:'''
  define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren
  define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren
  define M65.0 S7_DWrite flags 0 65.0                #S5-Merker M65.0 für FHEM-Schreibzugriff
  define M65.0 S7_DWrite flags 0 65.0                #S5-Merker M65.0 für FHEM-Schreibzugriff
  attr M65.0 IODev s5test                            #M65.0 an /dev/ttyAMA0 ist gemeint
  attr M65.0 IODev s5test                            #M65.0 an /dev/ttyAMA0 ist gemeint
Zeile 38: Zeile 68:
Das Merkerbyte 65 muss für den FHEM-Schreibzugriff reserviert sein. Die Lampe kann nun zusätzlich über das Webinterface oder die Smartphone-App geschaltet werden.
Das Merkerbyte 65 muss für den FHEM-Schreibzugriff reserviert sein. Die Lampe kann nun zusätzlich über das Webinterface oder die Smartphone-App geschaltet werden.


'''Hinweis:''' Bisher funktionieren von jedem Merkerbyte nur die ersten 4 Bit, hier also M 65.0 bis M 65.3. Die restlichen können bisher nicht benutzt werden.
==Namenskonvention für S5-FHEM-Projekt==
Um ein gewachsenes Projekt mit erträglichem Aufwand in die neue Zeit zu retten, dabei die Übersicht nicht zu verlieren, hat sich in Anlehnung an [https://www.fischer-net.de/hausautomation/fhem/22-fhem-devicenamen.html FISCHER-NET.DE] ein strukturiertes Namensschema bewährt. Die langen FHEM-Namen passen nur als Symbolik-Kommentar in die S5. Ergänzung 2022: Die Punkte als Trennzeichen habe ich inzwischen durch Unterstriche ersetzt, um die leichter Regex in FHEM verwenden zu können.
 
'''Der Aufbau der Namen:''' A.B.C.D ab 2022 als A_B_C_D
A   Ort im Gebäude oder auf dem Grundstück
B   Raum oder nähere Örtlichkeit
C   Gerät
D              Zweck
 
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL
 
Rollladen im Schlafzimmer öffnen:                OG.sz.M1763.RlHo
 
'''A          ID   Beschreibung'''
    KG   Kellergeschoß
    EG   Erdgeschoß
    OG   Obergeschoß
    SB   Spitzboden
    AB   Außenbereich
       
'''B   ID   Beschreibung'''
    wa   Wanne
                du              Dusche
    wz   Wohnen, Weg
    fl   Flur
    cp   Carport
    hr   Heizung
    hv   Holzvergaser
    k   Keller
    ku   Küche
    sz   Straße
    sz   Schlafen
       
'''C         <Gerätename>'''
'''D              <Zweck>'''
 
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==
 
Bei einem Wandtaster kann entschieden werden, welchen Zustand die Lampe hat, weil man sie sieht. Anders beim Webinterface, hier wäre ein gezieltes ein- bzw. ausschalten besser, weil man eventuell entfernt handelt. Damit läßt sich auch eine zentrales Licht-AUS bzw. eine Alarmbeleuchtung mit ALLES-AN realisieren. Je ein 16-Bit-Word wird für das Tasten, das Einschalten bzw. das Ausschalten vorgesehen. Das reicht für maximal 16 Lampen. Hier also das MW164 für Tasten, MW166 für Ein und MW168 für AUS. M164.7 für das Tasten, M166.7 für EIN und M168.7 für AUS der Giebellampe. Die notwendigen Konfigurationen für weitere Lampen können so  innerhalb der fhem.cfg kopiert und brauchen nur minimal angepasst werden. Ich empfehle vor Manipulationen der fhem.cfg unter Umgehung des dafür vorgesehenen Webinterfaces unbedingt ein Backup dieser Datei anzufertigen.
 
'''S5-Programm nochmals ergänzt'''
 
NETZWERK  12          Arbeitszimmer
00AC      :O(
00AD      :U(                                     
00AE      :U(
00AF      :O  -AzLiGt                    E64.7    Lichttaster
00B0      :O  -M 164.7                    M164.7  OG.Az.M1647.LaGiTast FHEM
00B1      :)
00B2      :UN  -AzLaGf                    M61.4    Flankenmerker
00B3      :)
00B4      :O  -M 166.7                    M166.7  OG.Az.M1667.LaGiEin FHEM
00B5      :S  -AzLaG                      A65.7    Lampe Arbeiten Giebel
00B6      :O(
00B7      :U(
00B8      :O  -AzLiGt                    E64.7    Lichttaster
00B9      :O  -M 164.7                    M164.7  OG.Az.M1647.LaGiTast FHEM
00BA      :)
00BB      :U  -AzLaGf                    M61.4    Flankenmerker
00BC      :)
00BD      :O  -M 168.7                    M168.7  OG.Az.M1667.LaGiAus FHEM
00BE      :R  -AzLaG                      A65.7    Lampe Arbeiten Giebel
00BF      :U  -AzLaG                      A65.7    Lampe Arbeiten Giebel
00C0      :)
00C1      :UN  -AzLiGt                    E64.7    Lichttaster
00C2      :UN  -M 164.7                    M164.7  OG.Az.M1647.LaGiTast FHEM
00C3      :S  -AzLaGf                    M61.4    Flankenmerker
00C4      :UN  -AzLiGt                    E64.7    Lichttaster
00C5      :UN  -M 164.7                    M164.7  OG.Az.M1647.LaGiTast FHEM
00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel
00C7      :R  -AzLaGf                    M61.4    Flankenmerker
00C8      :NOP 0
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]
 
'''zugehöriger Abschnitt aus der fhem.cfg'''
define s5test S7 S5 /dev/ttyAMA0
 
define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7
attr OG.az.M1647.LichtGtast IODev s5test
attr OG.az.M1647.LichtGtast alias Giebellampe
attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1647.LichtGtast icon light_pendant_light
attr OG.az.M1647.LichtGtast room Arbeitszimmer
attr OG.az.M1647.LichtGtast webCmd tasten
 
define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7
attr OG.az.M1667.LichtGaus IODev s5test
attr OG.az.M1667.LichtGaus alias Giebellampe.aus
attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1667.LichtGaus icon light_light
attr OG.az.M1667.LichtGaus room Arbeitszimmer
attr OG.az.M1667.LichtGaus webCmd tasten
 
define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7
attr OG.az.M1687.LichtGein IODev s5test
attr OG.az.M1687.LichtGein alias Giebellampe.an
attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1687.LichtGein icon light_light_dim_100
attr OG.az.M1687.LichtGein room Arbeitszimmer
attr OG.az.M1687.LichtGein webCmd tasten
 
Das FHEM-Gerät trägt nun einen strukturierten Namen, um es leicht zuordnen zu können. Auf der grafischen Oberfläche ist dies durch die Raumzuordung überflüssig. Hier wird der Alias Giebellampe verwendet. Außerdem kann man es gezielt aus- bzw. eintasten.
 
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]
 
==FHEM-S5-Rolladensteuerung ergänzen==
 
Die Rollläden sollen sich auch ohne FHEM durchz die S5 steuern lassen. Dazu wird die bisherige Ein-Taster-Bedienung modifiziert. Mit dem Taster wird ein Zähler inkrementiert. Die Zählstände werden den Zuständen STOP-HEBEN-STOP-SENKEN zugeordnet. Durch Setzen auf definierte Zählerstände durch FHEM-Merker ist parallel ein Zugriff mit FHEM möglich. Wie bei der Lampenschaltung soll sich auch hier ein zentrales HOCH bzw. RUNTER für alle vorhandenen Rolläden realisieren lassen. Dazu werden in der S5 das Merkerbyte MB176 bzw. M176.3 für HOCH und MB178 bzw. M178.3 für RUNTER und MB177 bzw. M177.3 für STOP für den FHEM-Zugriff konfiguriert. Damit sind maximal acht Rollläden .0 bis .7 möglich.
 
'''S5-Programm'''
<syntaxhighlight lang="Text">
Kommentar : ROLLOCTRL FB4
 
NETZWERK   1
 
    NAME :ROLLO-CT
 
    BEZ  :TOGG      E/A/D/B/T/Z: E  BI/BY/W/D: BI
 
    BEZ  :UP        E/A/D/B/T/Z: A  BI/BY/W/D: BI
 
    BEZ  :STOP      E/A/D/B/T/Z: A  BI/BY/W/D: BI
 
    BEZ  :DOWN      E/A/D/B/T/Z: A  BI/BY/W/D: BI
 
    BEZ  :CTR       E/A/D/B/T/Z: Z
 
    BEZ  :M1        E/A/D/B/T/Z: A  BI/BY/W/D: BI
 
    BEZ  :M2        E/A/D/B/T/Z: A  BI/BY/W/D: BI
 
001A      :
 
001B      :***
 
NETZWERK   2             Pro Tastimpuls CTR inkrementier
 
001C      :U   =  TOGG
 
001D      :SSV =  CTR
 
001E      :***
 
NETZWERK   3             Von 0 bis 3 zaehlen
 
001F      :L   =  CTR
 
0020      :L   KZ 003
 
0022      :>F
 
0023      :RD  =  CTR
 
0024      :***
 
NETZWERK   4             Abfrage auf positive Flanke UP
 
0025      :U   =  UP
 
0026      :L   KZ 001
 
0028      :SVZ =  CTR
 
0029      :RB  =  UP
 
002A      :
 
002B      :***
 
NETZWERK   5            Abfrage auf postive Flanke Stop
 
002C      :U   =  STOP
 
002D      :RD  =  CTR
 
002E      :RB  =  STOP
 
002F      :***
 
NETZWERK   6            Abfrage auf positive Flanke Down
 
0030      :U   =  DOWN
 
0031      :L   KZ 003
 
0033      :SVZ =  CTR
 
0034      :RB  =  DOWN
 
0035      :
 
0036      :***
 
NETZWERK   7             Bei CTR=1 Heben
 
0037      :L   =  CTR
 
0038      :L   KZ 001
 
003A      :!=F
 
003B      :=   =  M1
 
003C      :***
 
NETZWERK   8             Bei CTR=3 Senken
 
003D      :L   =  CTR
 
003E      :L   KZ 003
 
0040      :!=F
 
0041      :=   =  M2
 
0042      :BE
</syntaxhighlight>
<syntaxhighlight lang="text">
Kommentar : PB4
 
Autor     : krueuw
 
Erstellt  :  Geaendert am:            BIB:
 
NETZWERK   1            EG NW-Zimmer
 
0000      :SPA FB 4
 
0001 NAME :ROLLO-CT
 
0002 TOGG >    E  65.2                              (E/BI)
 
0003 UP   >    M  176.3                            (A/BI)
 
0004 STOP >    M  177.3                            (A/BI)
 
0005 DOWN >    M  178.3                             (A/BI)
 
0006 CTR  >    Z  10                                (Z/)
 
0007 M1   >    A  11.4                              (A/BI)
 
0008 M2   >    A  11.5                              (A/BI)
 
0009      :*** 
 
:BE
</syntaxhighlight>
'''zugehöriger Abschnitt aus der fhem.cfg'''
 
Die Zeilen mit event-min-interval und .*:600 event-on-change-reading state dienen wie im [[S7#Ger.C3.A4teunabh.C3.A4ngige_Konfigurationsdetails|S7-Wiki]] beschrieben der Geschwindigkeitsverbesserung.
<syntaxhighlight lang="Text">
define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3
attr OG.sz.M1763.RlHo IODev s5test
attr OG.sz.M1763.RlHo alias Rollladen.hoch
attr OG.sz.M1763.RlHo event-min-interval .*:600
attr OG.sz.M1763.RlHo event-on-change-reading state
attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten
attr OG.sz.M1763.RlHo icon rc_UP
attr OG.sz.M1763.RlHo room Schlafen
attr OG.sz.M1763.RlHo sortby 01
attr OG.sz.M1763.RlHo webCmd tasten
define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3
attr OG.sz.M1773.RlStop IODev s5test
attr OG.sz.M1773.RlStop alias Rollladen.stop
attr OG.sz.M1773.RlStop event-min-interval .*:600
attr OG.sz.M1773.RlStop event-on-change-reading state
attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten
attr OG.sz.M1773.RlStop icon rc_REC
attr OG.sz.M1773.RlStop room Schlafen
attr OG.sz.M1773.RlStop sortby 02
attr OG.sz.M1773.RlStop webCmd tasten
define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3
attr OG.sz.M1783.RlRu IODev s5test
attr OG.sz.M1783.RlRu alias Rollladen.runter
attr OG.sz.M1783.RlRu event-min-interval .*:600
attr OG.sz.M1783.RlRu event-on-change-reading state
attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten
attr OG.sz.M1783.RlRu icon rc_DOWN
attr OG.sz.M1783.RlRu room Schlafen
attr OG.sz.M1783.RlRu sortby 03
attr OG.sz.M1783.RlRu webCmd tasten
</syntaxhighlight>
'''Ergebnis'''
 
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]
 
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.
 
Dann ist der Weg für die Steuerung über die Module ROLLO und ASC frei:
[[Datei:Rollo-Konfiguration.png|alternativtext=x|links|1539x1539px]]
 
==FHEM-S5-Bewässerungssteuerung ergänzen==
 
Bisher können vier Gartenschläuche mit Perlschläuchen über Magnetventile per Taster bzw. Zeitschaltung betrieben werden. Zusätzlich soll warmes Wasser zugemischt werden können, um eine Überhitzung der Dachkollektoren zu verhindern. Die Zeitschaltung ist nur äußerst unkomfortabel über einen Datenbaustein zu konfigurieren und wurde daher kaum benutzt. Im Ergebnis lief das Wasser im Garten oft unkontrolliert über viele Stunden. Ziel mit FHEM ist eine deutliche Verbesserung. Zunächst wird die Einschaltzeit per FHEM auf 90 min begrenzt.
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]
wird fortgesetzt wenn es wieder wärmer ist ..
 
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==
Nachdem die S5-Unterstützung fester Bestandteil von FHEM ist und vorher auch keine Probleme mit dem verwendeten S7-Modul auftraten, geht es jetzt ans Eingemachte - die Steuerung der Heizung. Die Steuerung soll nun (fast) ausschließlich von FHEM erledigt werden, weil es damit leichter möglich ist umfangreiche Abhängigkeiten abzubilden und entsprechenden Module fertig zur Verfügung stehen. Die S5 dient hier nur noch als "dumme" Ausgangsklemme für die  von FHEM gesteuerten Aktoren. Damit soll der Aufwand und die Komplexität der Steuerung reduziert werden. Eine Anpassung des S5-Programms soll so kaum noch notwendig sein, um auch das lästige Umstecken der PG-Schnittstelle zu erledigen.
===Sensorik mit OWX===
Im ersten Schritt habe ich die bisherige analoge Temperaturmessung mit [http://www.sprut.de/electronic/temeratur/temp.htm gemultiplexten B511] am Analogeingang der SPS durch [[:Kategorie:1-Wire|Sensoren am 1-Wire-Bus]] ersetzt, um mehr Messtellen ohne aufwändige Kalibrierung und Verkabelung zu bedienen und auch die Luftfeuchte und die solare Einstrahlung zu messen. FHEM stellt die zwei weitgehend getrennten Module owserver und OWX zur Unterstützung des 1-Wire-Busses zur Verfügung. Nach erfolgreichen Tests ist es OWX geworden, weil hier ohne Umwege über zum Teil {{Link2Forum|Topic=56881|LinkText=haklige Fremdsoftware-Installationen}} direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.
 
Zunächst benötigt man eine von OWX unterstützte Hardware, um auf den 1-Wire-Bus zuzugreifen. Ich habe mich für die zuverlässigere Variante Raspi -> USB -> 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die {{Link2Forum|Topic=11709|LinkText=wackligeren Varianten}} entschieden.  Nützlich dazu war die Anleitung von [https://waschto.eu/owx waschto.eu].{{Randnotiz | RNTyp=y | RNText=Um die Ausfallsicherheit der Temperaturmessung zu erhöhen, sollte das verwendete USB-Device so wie [https://wiki.siduction.de/index.php?title=Symlink_zur_eindeutigen_Erkennung_mittels_udev-Regel hier] beschrieben fest dem Adapter zugeordnet werden. Sonst kann es passieren, dass beim Umstecken von USB-Geräten unbemerkt der gesamte Bus ausfällt. }}
 
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmessstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.
 
Viel Zeit kann man vertrödeln, wenn man die korrekte Busverkabelung als Nebensache ansieht. Korrekt sieht sie entsprechend der Diskussion im Forum so aus: [[Datei:korrekte_1-wire_Verkabelung.jpg|mini|ohne|1-Wire-Busverdrahtung nach PAH]]
Diese [[1-Wire_Busverlegung#Verbindung_verschiedener_Kabeltypen|LSA+ Boxen]] habe ich für den direkten Anschluss bzw. für über max. 3 m lange Stubs von konfektionierten Sensoren verwendet und sonst Abzweige in Feuchtraumabzweigdosen mit Data-Return-Ader über Leuchtenklemmen hergestellt. Noch besser ist womöglich die im {{Link2Forum|Topic=21473|LinkText=Forum}} empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&GROUPID=7539&ARTICLE=100838&SHOW=1&OFFSET=16& Variante]. Mögliche Problemlösungen sind {{Link2Forum|Topic=56881|LinkText=hier}}  dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.
 
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,
*ersten Sensor einzeln an den Bus geklemmt,
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,
*nächsten Sensor zusätzlich an den Bus geklemmt,
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,
*die erscheinende Liste in die Textdatei owx2 kopiert,
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,
*usw. usf.
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:
 
rename OWX_20_FF0939521603 OG.hr.DS1820.Hz
Ausschnitt aus der [[Konfiguration]], komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:
 
define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603
attr OG.hr.DS1820.Hz_VL IODev OneWire
attr OG.hr.DS1820.Hz_VL alias Hz-VL
attr OG.hr.DS1820.Hz_VL event-min-interval 60
attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3
attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden
attr OG.hr.DS1820.Hz_VL model DS18B20
attr OG.hr.DS1820.Hz_VL room Heizung
attr OG.hr.DS1820.Hz_VL sortby 01
 
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]
 
===Heizkreis-Regelung mit PWM===
 
Die Ansteuerung der 230-V-Heizkreis-Thermoantriebe habe ich ohne Änderung aus der alten SPS-Steuerung übernommen. Sie werden direkt mit einer kontaktlosen S5-230-V-Ausgabebaugruppe geschaltet. [[Datei:Fhem-s5-ta.png|mini|ohne|Ansteuerung der Thermoantriebe der Heizkreisventile]]
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]
 
Das Modul [[Steuerung_einer_Fussbodenheizung_mit_dem_PWM-Modul|FHEM-PWM]] ist für die Einzelraumregelung von geschalteten Fußbodenheizungen vorgesehen. Es liest einen Temperatursollwert aus den Voreinstellungen, bildet daraus und aus der gemessenen IST-Raumtemperatur eine Regelabweichung und schaltet entsprechend die Heizkreise so, dass der SOLL-Wert schnell und ohne nennenswertes Überschwingen erreicht wird. Die Definition von PWM und PWMR am Beispiel eines Raumes in FHEM:
 
define fh PWM
 
define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo
attr OG.wo.PWMR alias Wohnen-Soll
attr OG.wo.PWMR autoCalcTemp 1
attr OG.wo.PWMR group Raum
attr OG.wo.PWMR room Heizung,Wohnen
attr OG.wo.PWMR tempDay 19
attr OG.wo.PWMR tempNight 16
attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N
attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N
 
Also, das Gerät fh definiert und je Raum ein Define von PWMR mit dem Raumfühler und dem Schalter für das Ventil als Parameter - fertig und funktioniert. Leider haben sich mir weitere Funktionen des Moduls bisher nicht erschlossen. Bitte am [[Steuerung_einer_Fussbodenheizung_mit_dem_PWM-Modul|Wiki]] mitarbeiten.
 
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:
 
define OG.wo.graph.dummy dummy
attr OG.wo.graph.dummy event-on-change-reading state
 
define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal("OG.wo.DS1820.TF", "temperature",0);;$d= 'OG.wo.temp '.$d;; fhem("set OG.wo.graph.dummy $d")}
 
define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy
attr FLog_OG.wo.graph.dummy logtype text
 
define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal("OG.wo.DS2438.RF","relHumidity",0);;$d= 'OG.wo.humidity '.$d;; fhem("set OG.wo.graph.dummy $d")}
 
define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal("OG.hr.A190.TAwo","state",0);;$d= 'OG.wo.TA '.$d;; fhem("set OG.wo.graph.dummy $d")}
 
define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT
 
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]
 
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===
 
Die Temperatur des Heizungswassers welches die Fußbodenheizungskreise durchströmt, sollte für Brennwertgeräte so niedrig wie möglich sein, um deren Wirkungsgrad zu verbessern. Hier geht es in erster Linie darum, dass das Wasser aus den Pufferspeichern des Holzvergasers mindestens auf die maximal zulässige Temperatur heruntergekühlt wird, um eine hohe Lebensdauer der Heizung zu gewährleisten. Als Mischventil verwende ich ein günstiges gebrauchtes fast lautlos arbeitendes Gerät [https://www.downloads.siemens.com/download-center/Download.aspx?pos=download&fct=getasset&id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann:
 
[[Datei:MXG461.png|mini|ohne|MXG461]]
 
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:
 
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]
 
Die Programmierung innerhalb der S5 kann so wie [http://gaxons.com/files/s5/s5_handbuch.pdf im Handbuchsiehe 3.3.5 und 12.2.2] beschrieben realisiert werden. Mit Hilfe des intern bereits vorhandenen Bausteins FB251 gelingt das leicht. Aufruf und Parametrierung des FB251 für das Mischventil mit: obere Grenze = 100, voll offen und: untere Grenze = 0 geschlossen.
 
:  SPA FB 251
NAME  :  RLG:AA
XE    :    MW130
BG    :    KF=8
KNKT  :    KY=0,0
OGR    :    KF=100
UGR    :    KF=0
FEH    :    M 131.0
BU    :    M 131.1
 
Die Stellgröße im Bereich von 0..100 muss nun von FHEM-PID20 in das Merkerwort MW130 der S5 geschrieben, eventuelle Fehlermeldungen von der S5 als FEH und BU zurückgeliefert werden.
 
'''16 Bit Merkerwort zum Schreiben'''
define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16
attr OG.hr.MW130.Mischventil IODev s5test
attr OG.hr.MW130.Mischventil alias Ventilstellung
attr OG.hr.MW130.Mischventil event-min-interval .*:600
attr OG.hr.MW130.Mischventil event-on-change-reading state
attr OG.hr.MW130.Mischventil group FBH-Mischer
attr OG.hr.MW130.Mischventil room Heizung
attr OG.hr.MW130.Mischventil sortby 01
 
'''Definition des PID-Reglers'''
define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:
attr PID.Test group FBH-Mischer
attr PID.Test pidActorErrorPos 0
attr PID.Test pidActorInterval 1
attr PID.Test pidCalcInterval 20
attr PID.Test pidReverseAction 1
attr PID.Test room Heizung
 
'''SPS-Konfigurationsfehler melden'''
define OG.hr.M1301.FEH S7_DRead flags 0 131.0
attr OG.hr.M1301.FEH IODev s5test
attr OG.hr.M1301.FEH alias SPS-Konfiguration
attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen
attr OG.hr.M1301.FEH event-min-interval .*:600
attr OG.hr.M1301.FEH event-on-change-reading state
attr OG.hr.M1301.FEH group FBH-Mischer
attr OG.hr.M1301.FEH room Heizung
attr OG.hr.M1301.FEH sortby 03
 
'''FHEM-Stellgrößen-Bereichsüberschreitung melden'''
define OG.hr.M1301.BU S7_DRead flags 0 131.1
attr OG.hr.M1301.BU IODev s5test
attr OG.hr.M1301.BU alias FHEM-Sollwert
attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen
attr OG.hr.M1301.BU event-min-interval .*:600
attr OG.hr.M1301.BU event-on-change-reading state
attr OG.hr.M1301.BU group FBH-Mischer
attr OG.hr.M1301.BU room Heizung
 
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]
 
===Warmwasserspeicherladung mit DOIF===
Wenn die Temperatur im Pufferspeicher des Holzvergasers OG.ks.DS1820.P500o deutlich höher ist als im Warmwasserspeicher OG.hr.DS1820.wwo, soll dieser geladen werden, indem das Ventil mit Hilfe eines 230 V Thermoantriebes OG.hr.M710.TAWW für den integrierten Wärmetauscher geöffnet wird. Ich benutze dazu die FHEM-Funktion [[DOIF]].
 
define OG.hr.WW.oben_heizen DOIF
            (([OG.ks.DS1820.P500o:temperature:d] > ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\
            (([OG.hr.DS1820.wwo:temperature:d] < 41) and
              ([OG.ks.DS1820.P500o:temperature:d] > ([OG.hr.DS1820.wwo:temperature:d] + 4))))\
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on)
DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)
attr OG.hr.WW.oben_heizen alias TA_WW
attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen
attr OG.hr.WW.oben_heizen do resetwait
attr OG.hr.WW.oben_heizen group Warmwasser
attr OG.hr.WW.oben_heizen room Heizung
attr OG.hr.WW.oben_heizen sortby 04
attr OG.hr.WW.oben_heizen wait 120
 
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===
Um einen schnellen Überblick über den Gesamtzustand der Heizungsanlage zu ermöglichen, ist die grafische Variante [[Floorplan]] besser als die FHEM-Ansicht mit Variable = Wert geeignet. Die Alternative [[YAF]] macht ebenfalls einen guten Eindruck. Sie speichert die Konfiguration aber nicht vollständig in der fhem.cfg und notwendige Anpassungen werden nur halbherzig betrieben. Die Anpassung an zukünftige Entwicklungen war für mich daher zu fraglich.
 
Zunächst habe ich das Heizungsschema mit [[https://qelectrotech.org/ Qelectrotech 0.5]] gezeichnet. Das Programm ist dazu gut geeignet, auch wenn der Name anderes suggeriert. Die fertige Zeichnung wird als PNG-Datei (oder SVG) gespeichert und als Hintergrundbild entsprechend der ausführlichen Beschreibung im [[Floorplan|Wiki]] eingefügt. Die Beeinflussung der Darstellungsdetails direkt über die zuständige CSS-Datei eröffnet alle Möglichkeiten ist aber sehr gewöhnungsbedürftig.
 
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]
 
Danach können interessante Schaltzustände und Messwerte integriert und auch später noch im WEB-Interface bearbeitet werden. Details werden in der fhem.cfg gespeichert, eine Bearbeitung an dieser Stelle erscheint mir eher weniger geeignet. Für jedes interessierende Anlagendetail kann eine neue Seite des Floorplans verwendet werden.
 
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]
 
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==
Nodered ist m.E. eine ideale Ergänzung zu FHEM und ein attraktives visuelles Frontend. Für die Integration habe ich mich an  den Videos von Matthias Kleine und [https://haus-automatisierung.com/ seiner Seite Hausautomatisierung] orientiert.
 
Für FHEM und angrenzende Dienste gibt es für den Raspi ein [https://github.com/fhem/fhem-docker offizielles Docker-Image], welches offenbar auch auf Vorarbeiten von Matthias zurück geht. Ich zeige, wie meine bestehende Installation in den Container umzog.
 
====Vorbereitung ====
 
Ich habe mich entschlossen, auch aus Sicherheitsgründen, auf einer neuen SD-Karte, hier in einem neuen Raspi4, ein komplett neues System aufzusetzen. Ein Raspi3 würde aber genügen.
[[Datei:Raspberry Pi OS Imager.png|alternativtext=Raspberry PI OS Lite (32-bit) auf der SDC installieren|links|mini|Raspberry PI OS Lite (32-bit) auf der SDC installieren]]
 
 
Der Imager lässt sich auf einem Ubuntu-PC so installieren:
 
<code>sudo apt update</code>
 
<code>sudo apt install snapd</code>
 
<code>sudo snap install rpi-imager</code>
 
Nach dem Start des neuen Systems, mit <code>sudo raspi-config</code> folgende Einstellungen ändern:
# System Options -> Password
# Interface Options -> SSH
# Localisation Options -> L1 bis L4
Docker kann nach dem SSH-Login <code>ssh pi@<raspi-IP></code> nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:
 
<code>sudo apt-get update</code>
 
<code>sudo apt-get upgrade</code>
 
<code>sudo reboot</code>
 
<code>sudo apt-get install wget git apt-transport-https vim telnet</code>
 
<code>curl -sSL <nowiki>https://get.docker.com</nowiki> | sh</code>
 
<code>sudo systemctl enable docker</code>
 
<code>sudo systemctl start docker</code>
 
<code>sudo usermod -aG docker pi</code>
 
<code>cd /srv</code>
 
<code>git clone -b raspbian <nowiki>https://github.com/klein0r/fhem-docker.git</nowiki> fhem-docker</code>
 
<code>cd fhem-docker</code>
 
<code>sudo apt-get install python-pip</code>
 
<code>sudo pip install docker-compose</code>
 
<code>exit</code>
 
Dann erneut per ssh anmelden.
<code>cd fhem-docker</code>
 
<code>docker-compose up</code>
Sollte der Fehler:
 
<code>ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &main::DockerImageInfo_HealthCheck called at (eval 47) line 1.</code>
 
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:
 
<code>define myDIInfo DockerImageInfo</code>
 
<code>attr myDIInfo DbLogExclude .*</code>
 
<code>attr myDIInfo alias Docker Image Info</code>
 
<code>attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red</code>
 
<code>attr myDIInfo group Update</code>
 
<code>attr myDIInfo icon docker</code>
 
<code>attr myDIInfo room System</code>
 
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter <raspi-ip>:8083/fhem sollte nach ein paar Minuten ein optisch und technisch entstaubtes FHEM (und auf anderen Ports die anderen Dienste) zu sehen sein. Falls keine Fehlermeldungen in der SSH-Session zu sehen sind, docker-compose mit <Strg>+<c> abbrechen und die Container im Hintergurnd neu starten mit:
 
<code>docker-compose up -d</code>
 
Da die Version von FHEM schon älter ist, Eingabe von <code>update</code> in die FHEM-Kommandozeile im Browser.
 
==== Serielle Schnittstellen anpassen ====
Die Module S7 und OWX brauchen im Container die seriellen Schnittstellen. Diese sind standardmäßig nicht dabei. Nach [https://raspberrypi.stackexchange.com/questions/114366/rpi4-serial-port-not-working-on-either-raspberry-os-or-ubuntu Anleitung] wird die /dev/ttyAMA0 für die S5 zunächst auf dem Raspi aktiviert:
$ sudo nano /boot/config.txt
am Ende hinzufügen:
enable_uart=1
dtoverlay=pi3-disable-bt
<code>sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service</code>
 
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:
 
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:
 
<code>KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”</code>
 
<code>KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”</code>
 
<code>KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”</code>
 
<code>KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”</code>
 
Aktivierung der Rules mit:
 
<code>sudo udevadm control --reload-rules && sudo udevadm trigger</code>
 
Gruppenzugehörigkeit ändern:
 
<code>sudo chgrp -h tty /dev/serial0</code>
 
<code>sudo chgrp -h tty /dev/serial1</code>
 
<code>sudo chgrp -h tty /dev/serial2</code>
 
<code>sudo chgrp -h tty /dev/serial3</code>
 
Pi-User zuordnen:
 
<code>sudo adduser $USER tty</code>
 
<code>sudo adduser $USER dialout</code>
 
Eigentümer setzen:
 
<code>sudo chmod g+r /dev/ttyUSB0</code>
 
<code>sudo chmod g+r /dev/ttyUSB1</code>
 
<code>sudo chmod g+r /dev/ttyUSB2</code>
 
<code>sudo chmod g+r /dev/ttyAMA0</code>
 
<code>sudo reboot</code>
 
Erfolgskontrolle auf dem Raspi: <code>ls -l /dev</code> sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.
 
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====
Für OWX ist die feste Zuordnung mehrerer Onewire-Adapter wichtig. [https://steigerbalett.wordpress.com/2015/05/24/mehrere-usb-devices-am-raspberrypi-richtig-in-fhem-zuordnen/ Dieser Befehl] zeigt eindeutige Namen, die auch nach dem Umstecken der USB-Stecker gültig bleiben: 
 
<code>ls -l /dev/serial/by-id</code> 
 
Das Ergebnis sieht bei mir so aus: 
 
<code>lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -> ../../ttyUSB0</code> 
 
<code>lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -> ../../ttyUSB2</code>
 
<code>lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -> ../../ttyUSB3</code>
 
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:
<syntaxhighlight lang="YAML>
networks:
       - fhem-network
devices:
     #  - "/dev/ttyUSB0:/dev/ttyUSB0"
        - "/dev/ttyAMA0:/dev/ttyAMA0"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1"
</syntaxhighlight>
 
Nach dem Speichern der docker-compose.yml, die Container mit <code>docker-compose down</code> bzw. <code>docker-compose up -d</code> neustarten.
 
Erfolgskontrolle auf der Pi-Konsole mit <code>docker exec -it fhem-docker_fhem_1 /bin/bash</code>:
 
<nowiki>#</nowiki> ls -l /dev
 
..
 
<code>crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1</code>
 
<code>crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2</code>
 
<code>crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3</code>
 
..
 
<code>exit</code>
 
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:
 
<code>define myS5 S7 S5 /dev/ttyAMA0</code> sollte im Webinterface zum state '''connected''' führen.
 
<code>define onewire3 OWX /dev/onewire3</code> sollte im Webinterface zum state '''opened''' führen.
 
Nach einiger Zeit sollte per <code>get onewire1 devices</code> eine Liste der angeschlossenen OW-Geräte sichtbar sein:
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]             
 
Damit ist alles bereit und die Test-Geräte S7 und OWX müssen im Webinterface gelöscht und die eventuell automatisch erkannten Sensoren manuell aus der fhem.cfg entfernt werden. Danach FHEM <code>shutdown restart</code>.           
 
==== Multicast-Empfang mit Docker ====
Die Integration der SMA-PV-Anlage wird bei mir durch das Modul SMAEM erledigt, welches den gesendeten Multicast von HM20 bzw. EM10 für FHEM bereitstellen kann. Diese funktionieren mit Multicast, den das Standard-Bridge-Docker-Netzwerk nicht weiterleiten mag. Der Maintainer des Moduls, Volker Kettenbach, hat dafür in '''{{Link2Forum|Topic=114284|LinkText=diesem Forenbeitrag}}''' eine Lösung vorgeschlagen, die ich hier realisiert habe. Die zugehörige Definition: '''[[raspi docker-compose.yml]]'''.
 
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:
:<code>docker network create -d macvlan -o parent=eth0 --subnet=192.168.31.0/24 --gateway=192.168.31.254 --ip-range=192.168.31.0/28 mymacvlannetwork</code>
 
==== Alte Konfiguration in den neuen Container übernehmen ====
Ich habe die neue Grundkonfiguration in der  Container-fhem.cfg des Containers unverändert übernommen, alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg hinein kopiert. Nach einem <code>shutdown restart</code> funktionierte dann (fast) alles wie gewünscht.
 
Die [[SVG-Plots_von_FileLog_auf_DbLog_umstellen|Umstellung]] auf das nun eingerichtete DBlog erfordert ein wenig Überlegung und manuelle Eingriffe, belohnt aber mit schneller Darstellung von Diagrammen.
 
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. Ich benutze dazu einen Raspi mit  Raspi-OS und GUI. Nachdem man einen externen SD-Card-Reader angeschlossen hat, kann die eingelegte Karte direkt mit einem Befehl der GUI dupliziert werden.
 
==== Raspi-Alternative x64-ThinClient integrieren (2023) ====
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c't 6/2023 S. 34] erläuert eine ausgesuchte kompatible Alternative, die nur wenig mehr elektrische Energie benötigt und eventuell sogar preiswerter ist, einen Thin Client Fujitsu Futro S740. Damit kann die Programmiersoftware für DOS oder  Windows mit Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:
 
# LUbuntu LTS vom Stick installieren,
# XRDP nach Anleitung installieren -> Zugriff mit Remmina-Client variable Auflösung,
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,
# [https://wiki.winehq.org/Wine_User%27s_Guide#Serial_and_Parallel_Ports wine regedit] benutzt, um COM1 mit /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 zu verbinden und um die [https://www.codeweavers.com/support/wiki/linux/faq/cxoffice_othermenufontsize Menü-Schriftgröße] anzupassen.
# Programmiersoftware vom Datenträger installieren,
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,
# Docker installieren,
# Docker compose installieren,
# Multicast für SMA-Geräte,
## <code>docker network create -d macvlan -o parent=eno1 --subnet=192.168.1.0/24 --gateway=192.168.1.254 --ip-range=192.168.1.0/27 mymacvlannetwork</code>
## Forenthema '''{{Link2Forum|Topic=114284|LinkText=FHEM in Docker mit IP-Adresse aus dem Host-Subnetz - nötig für Multicastempfang}}'''
# <code>IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen</code>
# '''[[futro-docker-compose.yml]]''' mit für die abweichende Hardware nötigen Änderungen,
# den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],
# Log-DB neuaufsetzen,
# Umstecken der Programmierleitung zwischen FHEM und PG ist nun nicht mehr nötig. Einfach den Compose-Stack anhalten und es kann direkt losgehen. Bei Problemen hilft eventuell:
:<code>sudo modprobe -r pl2303 && sudo modprobe  pl2303</code>
 
==== Fazit ====
Die Simatic S5 hat es ins Docker-Zeitalter geschafft ;-) kann Daten per MQTT publishen und subscriben, (Daten mit Node-Red visualisieren und potenziell nun auch IOBroker-kompatibel werden.)


Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.


zurück zum [http://www.fhemwiki.de/wiki/Alternative:_Aktuelle_Entwicklerversion_der_offiziellen_FHEM-S7-Module_mit_S5-Support#Erfahrungen Ausgangs-Artikel]
[[Kategorie:Siemens PLC]]
[[Kategorie:Examples]]

Aktuelle Version vom 14. Juni 2023, 10:03 Uhr

Dieser Artikel beschreibt eine Beispielkonfiguration für die SPS-Hardware Siemens S5. Eine Anpassung an die S7 bzw. Logo ist mit meist sehr geringem Aufwand möglich, weil das selbe Modul verwendet werden kann. Ausgangspunkt ist eine seit 1997 gewachsene S5-95U-Haussteuerung. Inzwischen wurde diese um eine FHEM-Anbindung in einer Docker-Umgebung ergänzt. Ich (Benutzer:Krueuw) demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.

Status von S5-Ausgängen in FHEM anzeigen (2016)

Nachdem der FHEM-Host z.B. ein Raspberry Pi über die normale Programmierleitung wie hier beschrieben verbunden ist, können auf der FHEM-Kommandozeile im WEB-Interface folgende Befehle eingegeben werden.

Bei mir wird die biologische Nachklärung des Abwassers mit einem Launhardt-Reaktor erledigt. Drei Pumpen werden durch die S5-Ausgänge A13.0 .. A13.2 zeitgesteuert geschaltet. In FHEM soll der Status der Ausgänge angezeigt werden. Dazu müssen nur die betreffenden Ausgänge in FHEM bekannt gemacht werden. Änderungen am S5-Programm sind nicht notwendig.

define s5test S7 S5 /dev/ttyAMA0
define Abpumpen S7_DRead outputs 0 13.0
attr Abpumpen IODev s5test
attr Abpumpen icon icoBaum
attr Abpumpen room Abwasser
attr Abpumpen sortby 03
define Umpumpen S7_DRead outputs 0 13.1
attr Umpumpen IODev s5test
attr Umpumpen icon audio_repeat
attr Umpumpen room Abwasser
attr Umpumpen sortby 02
define Zupumpen S7_DRead outputs 0 13.2
attr Zupumpen IODev s5test
attr Zupumpen icon scene_toilet_alternat
attr Zupumpen room Abwasser
attr Zupumpen sortby 01
Erfolgskontrolle

vorhandene S5-Lampensteuerung um FHEM ergänzen

Das S5-Programm für das Schalten der Beleuchtung mittels Taster soll auch bei ausgefallenem FHEM funktionieren wie bisher. Dazu schaltet FHEM spezielle Merker, die dann per ODER mit den anderen Eingängen verknüpft werden, hier Merker M 65.0 (vier ergänzte Zeilen):

NETZWERK   12           Arbeitszimmer
00AC      :U(                                      
00AD      :U(                              
00AE      :O   E  64.7                              Taster im Arbeitszimmer
00AF      :O   M  65.0                              Merker für FHEM
00B0      :)                               
00B1      :UN  M  61.4                              Flankenmerker
00B2      :S   A  65.7                              Lampe Arbeiten Giebel
00B3      :U(                               
00B4      :O   E  64.7                              Taster im Arbeitszimmer
00B5      :O   M  65.0                              Merker für FHEM
00B6      :)                               
00B7      :U   M  61.4                              Flankenmerker
00B8      :R   A  65.7                              Lampe Arbeiten Giebel
00B9      :U   A  65.7                              Lampe Arbeiten Giebel
00BA      :)
00BB      :UN  E  64.7                              Taster im Arbeitszimmer
00BC      :UN  M  65.0                              Merker für FHEM
00BD      :S   M  61.4                              Flankenmerker
00BE      :UN  E  64.7                              Taster im Arbeitszimmer
00BF      :UN  M  65.0                              Merker für FHEM
00C0      :UN  A  65.7                              Lampe Arbeiten Giebel
00C1      :R   M  61.4                              Flankenmerker
00C2      :NOP 0 
          :***

zugehörige FHEM-Konfiguration:

define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren
define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff
attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint
attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -> tasten 
attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen
attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung
attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als "tasten"

Das Merkerbyte 65 muss für den FHEM-Schreibzugriff reserviert sein. Die Lampe kann nun zusätzlich über das Webinterface oder die Smartphone-App geschaltet werden.

Namenskonvention für S5-FHEM-Projekt

Um ein gewachsenes Projekt mit erträglichem Aufwand in die neue Zeit zu retten, dabei die Übersicht nicht zu verlieren, hat sich in Anlehnung an FISCHER-NET.DE ein strukturiertes Namensschema bewährt. Die langen FHEM-Namen passen nur als Symbolik-Kommentar in die S5. Ergänzung 2022: Die Punkte als Trennzeichen habe ich inzwischen durch Unterstriche ersetzt, um die leichter Regex in FHEM verwenden zu können.

Der Aufbau der Namen: A.B.C.D ab 2022 als A_B_C_D

A 	  	Ort im Gebäude oder auf dem Grundstück
B 	  	Raum oder nähere Örtlichkeit
C 	  	Gerät
D               Zweck

Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL

Rollladen im Schlafzimmer öffnen: OG.sz.M1763.RlHo

A  	        ID 	  	Beschreibung
 	  	KG 	  	Kellergeschoß
 	  	EG 	  	Erdgeschoß
 	  	OG 	  	Obergeschoß
 	  	SB 	  	Spitzboden
 	  	AB 	  	Außenbereich 
 	  	  	  	 
B 	  	ID 	  	Beschreibung
 	  	wa 	  	Wanne
                du              Dusche
 	  	wz 	  	Wohnen, Weg
 	  	fl 	  	Flur
 	  	cp 	  	Carport
 	  	hr 	  	Heizung
 	  	hv	  	Holzvergaser
 	  	k	  	Keller
 	  	ku 	  	Küche
 	  	sz 	  	Straße
 	  	sz 	  	Schlafen
 	  	  	  	 
C 	        <Gerätename>

D               <Zweck>

FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen

Bei einem Wandtaster kann entschieden werden, welchen Zustand die Lampe hat, weil man sie sieht. Anders beim Webinterface, hier wäre ein gezieltes ein- bzw. ausschalten besser, weil man eventuell entfernt handelt. Damit läßt sich auch eine zentrales Licht-AUS bzw. eine Alarmbeleuchtung mit ALLES-AN realisieren. Je ein 16-Bit-Word wird für das Tasten, das Einschalten bzw. das Ausschalten vorgesehen. Das reicht für maximal 16 Lampen. Hier also das MW164 für Tasten, MW166 für Ein und MW168 für AUS. M164.7 für das Tasten, M166.7 für EIN und M168.7 für AUS der Giebellampe. Die notwendigen Konfigurationen für weitere Lampen können so innerhalb der fhem.cfg kopiert und brauchen nur minimal angepasst werden. Ich empfehle vor Manipulationen der fhem.cfg unter Umgehung des dafür vorgesehenen Webinterfaces unbedingt ein Backup dieser Datei anzufertigen.

S5-Programm nochmals ergänzt

NETZWERK   12           Arbeitszimmer
00AC      :O(
00AD      :U(                                       
00AE      :U(
00AF      :O   -AzLiGt                     E64.7    Lichttaster
00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM
00B1      :)
00B2      :UN  -AzLaGf                     M61.4    Flankenmerker
00B3      :)
00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM
00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel
00B6      :O(
00B7      :U(
00B8      :O   -AzLiGt                     E64.7    Lichttaster
00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM
00BA      :)
00BB      :U   -AzLaGf                     M61.4    Flankenmerker
00BC      :)
00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM
00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel
00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel
00C0      :)
00C1      :UN  -AzLiGt                     E64.7    Lichttaster
00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM
00C3      :S   -AzLaGf                     M61.4    Flankenmerker
00C4      :UN  -AzLiGt                     E64.7    Lichttaster
00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM
00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel
00C7      :R   -AzLaGf                     M61.4    Flankenmerker
00C8      :NOP 0
Funktionsplan der Licht-Steuerung

zugehöriger Abschnitt aus der fhem.cfg

define s5test S7 S5 /dev/ttyAMA0
define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7
attr OG.az.M1647.LichtGtast IODev s5test
attr OG.az.M1647.LichtGtast alias Giebellampe
attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1647.LichtGtast icon light_pendant_light
attr OG.az.M1647.LichtGtast room Arbeitszimmer
attr OG.az.M1647.LichtGtast webCmd tasten
define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7
attr OG.az.M1667.LichtGaus IODev s5test
attr OG.az.M1667.LichtGaus alias Giebellampe.aus
attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1667.LichtGaus icon light_light
attr OG.az.M1667.LichtGaus room Arbeitszimmer
attr OG.az.M1667.LichtGaus webCmd tasten
define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7
attr OG.az.M1687.LichtGein IODev s5test
attr OG.az.M1687.LichtGein alias Giebellampe.an
attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten
attr OG.az.M1687.LichtGein icon light_light_dim_100
attr OG.az.M1687.LichtGein room Arbeitszimmer
attr OG.az.M1687.LichtGein webCmd tasten

Das FHEM-Gerät trägt nun einen strukturierten Namen, um es leicht zuordnen zu können. Auf der grafischen Oberfläche ist dies durch die Raumzuordung überflüssig. Hier wird der Alias Giebellampe verwendet. Außerdem kann man es gezielt aus- bzw. eintasten.

Erfolgskontrolle

FHEM-S5-Rolladensteuerung ergänzen

Die Rollläden sollen sich auch ohne FHEM durchz die S5 steuern lassen. Dazu wird die bisherige Ein-Taster-Bedienung modifiziert. Mit dem Taster wird ein Zähler inkrementiert. Die Zählstände werden den Zuständen STOP-HEBEN-STOP-SENKEN zugeordnet. Durch Setzen auf definierte Zählerstände durch FHEM-Merker ist parallel ein Zugriff mit FHEM möglich. Wie bei der Lampenschaltung soll sich auch hier ein zentrales HOCH bzw. RUNTER für alle vorhandenen Rolläden realisieren lassen. Dazu werden in der S5 das Merkerbyte MB176 bzw. M176.3 für HOCH und MB178 bzw. M178.3 für RUNTER und MB177 bzw. M177.3 für STOP für den FHEM-Zugriff konfiguriert. Damit sind maximal acht Rollläden .0 bis .7 möglich.

S5-Programm

Kommentar : ROLLOCTRL FB4

NETZWERK   1

    NAME :ROLLO-CT

    BEZ  :TOGG      E/A/D/B/T/Z: E  BI/BY/W/D: BI

    BEZ  :UP        E/A/D/B/T/Z: A  BI/BY/W/D: BI

    BEZ  :STOP      E/A/D/B/T/Z: A  BI/BY/W/D: BI

    BEZ  :DOWN      E/A/D/B/T/Z: A  BI/BY/W/D: BI

    BEZ  :CTR       E/A/D/B/T/Z: Z

    BEZ  :M1        E/A/D/B/T/Z: A  BI/BY/W/D: BI

    BEZ  :M2        E/A/D/B/T/Z: A  BI/BY/W/D: BI

001A      :

001B      :***

NETZWERK   2             Pro Tastimpuls CTR inkrementier

001C      :U   =  TOGG

001D      :SSV =  CTR

001E      :***

NETZWERK   3             Von 0 bis 3 zaehlen

001F      :L   =  CTR

0020      :L   KZ 003

0022      :>F

0023      :RD  =  CTR

0024      :***

NETZWERK   4             Abfrage auf positive Flanke UP

0025      :U   =  UP

0026      :L   KZ 001

0028      :SVZ =  CTR

0029      :RB  =  UP

002A      :

002B      :***

NETZWERK   5            Abfrage auf postive Flanke Stop

002C      :U   =  STOP

002D      :RD  =  CTR

002E      :RB  =  STOP

002F      :***

NETZWERK   6            Abfrage auf positive Flanke Down

0030      :U   =  DOWN

0031      :L   KZ 003

0033      :SVZ =  CTR

0034      :RB  =  DOWN

0035      :

0036      :***

NETZWERK   7             Bei CTR=1 Heben

0037      :L   =  CTR

0038      :L   KZ 001

003A      :!=F

003B      :=   =  M1

003C      :***

NETZWERK   8             Bei CTR=3 Senken

003D      :L   =  CTR

003E      :L   KZ 003

0040      :!=F

0041      :=   =  M2

0042      :BE
Kommentar : PB4

Autor     : krueuw

Erstellt  :  Geaendert am:            BIB:

NETZWERK   1            EG NW-Zimmer

0000      :SPA FB 4

0001 NAME :ROLLO-CT

0002 TOGG >    E  65.2                              (E/BI)

0003 UP   >    M  176.3                            (A/BI)

0004 STOP >    M  177.3                            (A/BI)

0005 DOWN >    M  178.3                             (A/BI)

0006 CTR  >    Z  10                                (Z/)

0007 M1   >    A  11.4                              (A/BI)

0008 M2   >    A  11.5                              (A/BI)

0009      :***  

:BE

zugehöriger Abschnitt aus der fhem.cfg

Die Zeilen mit event-min-interval und .*:600 event-on-change-reading state dienen wie im S7-Wiki beschrieben der Geschwindigkeitsverbesserung.

 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3
 attr OG.sz.M1763.RlHo IODev s5test
 attr OG.sz.M1763.RlHo alias Rollladen.hoch
 attr OG.sz.M1763.RlHo event-min-interval .*:600
 attr OG.sz.M1763.RlHo event-on-change-reading state
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten
 attr OG.sz.M1763.RlHo icon rc_UP
 attr OG.sz.M1763.RlHo room Schlafen
 attr OG.sz.M1763.RlHo sortby 01
 attr OG.sz.M1763.RlHo webCmd tasten
 
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3
 attr OG.sz.M1773.RlStop IODev s5test
 attr OG.sz.M1773.RlStop alias Rollladen.stop
 attr OG.sz.M1773.RlStop event-min-interval .*:600
 attr OG.sz.M1773.RlStop event-on-change-reading state
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten
 attr OG.sz.M1773.RlStop icon rc_REC
 attr OG.sz.M1773.RlStop room Schlafen
 attr OG.sz.M1773.RlStop sortby 02
 attr OG.sz.M1773.RlStop webCmd tasten
 
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3
 attr OG.sz.M1783.RlRu IODev s5test
 attr OG.sz.M1783.RlRu alias Rollladen.runter
 attr OG.sz.M1783.RlRu event-min-interval .*:600
 attr OG.sz.M1783.RlRu event-on-change-reading state
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten
 attr OG.sz.M1783.RlRu icon rc_DOWN
 attr OG.sz.M1783.RlRu room Schlafen
 attr OG.sz.M1783.RlRu sortby 03
 attr OG.sz.M1783.RlRu webCmd tasten

Ergebnis

Erfolgskontrolle

Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.

Dann ist der Weg für die Steuerung über die Module ROLLO und ASC frei:

x

FHEM-S5-Bewässerungssteuerung ergänzen

Bisher können vier Gartenschläuche mit Perlschläuchen über Magnetventile per Taster bzw. Zeitschaltung betrieben werden. Zusätzlich soll warmes Wasser zugemischt werden können, um eine Überhitzung der Dachkollektoren zu verhindern. Die Zeitschaltung ist nur äußerst unkomfortabel über einen Datenbaustein zu konfigurieren und wurde daher kaum benutzt. Im Ergebnis lief das Wasser im Garten oft unkontrolliert über viele Stunden. Ziel mit FHEM ist eine deutliche Verbesserung. Zunächst wird die Einschaltzeit per FHEM auf 90 min begrenzt.

Schaltplan der Bewässerung

wird fortgesetzt wenn es wieder wärmer ist ..

FHEM-S5-Heizungssteuerung neu anlegen [2017]

Nachdem die S5-Unterstützung fester Bestandteil von FHEM ist und vorher auch keine Probleme mit dem verwendeten S7-Modul auftraten, geht es jetzt ans Eingemachte - die Steuerung der Heizung. Die Steuerung soll nun (fast) ausschließlich von FHEM erledigt werden, weil es damit leichter möglich ist umfangreiche Abhängigkeiten abzubilden und entsprechenden Module fertig zur Verfügung stehen. Die S5 dient hier nur noch als "dumme" Ausgangsklemme für die von FHEM gesteuerten Aktoren. Damit soll der Aufwand und die Komplexität der Steuerung reduziert werden. Eine Anpassung des S5-Programms soll so kaum noch notwendig sein, um auch das lästige Umstecken der PG-Schnittstelle zu erledigen.

Sensorik mit OWX

Im ersten Schritt habe ich die bisherige analoge Temperaturmessung mit gemultiplexten B511 am Analogeingang der SPS durch Sensoren am 1-Wire-Bus ersetzt, um mehr Messtellen ohne aufwändige Kalibrierung und Verkabelung zu bedienen und auch die Luftfeuchte und die solare Einstrahlung zu messen. FHEM stellt die zwei weitgehend getrennten Module owserver und OWX zur Unterstützung des 1-Wire-Busses zur Verfügung. Nach erfolgreichen Tests ist es OWX geworden, weil hier ohne Umwege über zum Teil haklige Fremdsoftware-Installationen direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.

Zunächst benötigt man eine von OWX unterstützte Hardware, um auf den 1-Wire-Bus zuzugreifen. Ich habe mich für die zuverlässigere Variante Raspi -> USB -> 1-wire über einen DS9097U kompatiblen Adapter und gegen die wackligeren Varianten entschieden. Nützlich dazu war die Anleitung von waschto.eu.

Emblem-question-yellow.svgUm die Ausfallsicherheit der Temperaturmessung zu erhöhen, sollte das verwendete USB-Device so wie hier beschrieben fest dem Adapter zugeordnet werden. Sonst kann es passieren, dass beim Umstecken von USB-Geräten unbemerkt der gesamte Bus ausfällt.


Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich hier gekauft. Für die restlichen Temperaturmessstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.

Viel Zeit kann man vertrödeln, wenn man die korrekte Busverkabelung als Nebensache ansieht. Korrekt sieht sie entsprechend der Diskussion im Forum so aus:

1-Wire-Busverdrahtung nach PAH

Diese LSA+ Boxen habe ich für den direkten Anschluss bzw. für über max. 3 m lange Stubs von konfektionierten Sensoren verwendet und sonst Abzweige in Feuchtraumabzweigdosen mit Data-Return-Ader über Leuchtenklemmen hergestellt. Noch besser ist womöglich die im Forum empfohlenen Variante. Mögliche Problemlösungen sind hier dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.

Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:

  • Status von OneWire unter Unsorted im WEB-Interface muss Active sein,
  • ersten Sensor einzeln an den Bus geklemmt,
  • in der Detailansicht get Onewire devices ausgewählt,
  • die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,
  • owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,
  • config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,
  • shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,
  • nächsten Sensor zusätzlich an den Bus geklemmt,
  • In der Detailansicht wieder get Onewire devices ausgewählt,
  • die erscheinende Liste in die Textdatei owx2 kopiert,
  • Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,
  • Differenz in owx-uebersicht einfügt und Zweck ergänzt,
  • Differenz nach owx1 übernommen, für den neuen IST-Zustand,
  • usw. usf.
  • erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,
  • Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:
rename OWX_20_FF0939521603 OG.hr.DS1820.Hz

Ausschnitt aus der Konfiguration, komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:

define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603
attr OG.hr.DS1820.Hz_VL IODev OneWire
attr OG.hr.DS1820.Hz_VL alias Hz-VL
attr OG.hr.DS1820.Hz_VL event-min-interval 60
attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3
attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden
attr OG.hr.DS1820.Hz_VL model DS18B20
attr OG.hr.DS1820.Hz_VL room Heizung
attr OG.hr.DS1820.Hz_VL sortby 01
Erfolgskontrolle

Heizkreis-Regelung mit PWM

Die Ansteuerung der 230-V-Heizkreis-Thermoantriebe habe ich ohne Änderung aus der alten SPS-Steuerung übernommen. Sie werden direkt mit einer kontaktlosen S5-230-V-Ausgabebaugruppe geschaltet.

Ansteuerung der Thermoantriebe der Heizkreisventile
230 V Ausgabemodul

Das Modul FHEM-PWM ist für die Einzelraumregelung von geschalteten Fußbodenheizungen vorgesehen. Es liest einen Temperatursollwert aus den Voreinstellungen, bildet daraus und aus der gemessenen IST-Raumtemperatur eine Regelabweichung und schaltet entsprechend die Heizkreise so, dass der SOLL-Wert schnell und ohne nennenswertes Überschwingen erreicht wird. Die Definition von PWM und PWMR am Beispiel eines Raumes in FHEM:

define fh PWM
define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo
attr OG.wo.PWMR alias Wohnen-Soll
attr OG.wo.PWMR autoCalcTemp 1
attr OG.wo.PWMR group Raum
attr OG.wo.PWMR room Heizung,Wohnen
attr OG.wo.PWMR tempDay 19
attr OG.wo.PWMR tempNight 16
attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N
attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N

Also, das Gerät fh definiert und je Raum ein Define von PWMR mit dem Raumfühler und dem Schalter für das Ventil als Parameter - fertig und funktioniert. Leider haben sich mir weitere Funktionen des Moduls bisher nicht erschlossen. Bitte am Wiki mitarbeiten.

Um die Funktion von PWM zu visualisieren, kann man eine grafische Darstellung in Form eines Diagramms definieren:

define OG.wo.graph.dummy dummy
attr OG.wo.graph.dummy event-on-change-reading state
define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal("OG.wo.DS1820.TF", "temperature",0);;$d= 'OG.wo.temp '.$d;; fhem("set OG.wo.graph.dummy $d")}
define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy
attr FLog_OG.wo.graph.dummy logtype text
define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal("OG.wo.DS2438.RF","relHumidity",0);;$d= 'OG.wo.humidity '.$d;; fhem("set OG.wo.graph.dummy $d")}
define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal("OG.hr.A190.TAwo","state",0);;$d= 'OG.wo.TA '.$d;; fhem("set OG.wo.graph.dummy $d")}
define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT
Erfolgskontrolle

Regelung der FBH-Vorlauftemperatur mit dem Modul PID20

Die Temperatur des Heizungswassers welches die Fußbodenheizungskreise durchströmt, sollte für Brennwertgeräte so niedrig wie möglich sein, um deren Wirkungsgrad zu verbessern. Hier geht es in erster Linie darum, dass das Wasser aus den Pufferspeichern des Holzvergasers mindestens auf die maximal zulässige Temperatur heruntergekühlt wird, um eine hohe Lebensdauer der Heizung zu gewährleisten. Als Mischventil verwende ich ein günstiges gebrauchtes fast lautlos arbeitendes Gerät Siemens MXG461, welches von der S5 mit 0..10 V analog angesteuert werden kann:

MXG461

Bei der S5-95U kann man dazu den internen Analogausgang verwenden:

Verbindung 95U - MXG461

Die Programmierung innerhalb der S5 kann so wie im Handbuchsiehe 3.3.5 und 12.2.2 beschrieben realisiert werden. Mit Hilfe des intern bereits vorhandenen Bausteins FB251 gelingt das leicht. Aufruf und Parametrierung des FB251 für das Mischventil mit: obere Grenze = 100, voll offen und: untere Grenze = 0 geschlossen.

:  SPA FB 251
NAME   :  RLG:AA
XE     :    MW130
BG     :    KF=8
KNKT   :    KY=0,0 
OGR    :    KF=100
UGR    :    KF=0
FEH    :    M  131.0
BU     :    M  131.1

Die Stellgröße im Bereich von 0..100 muss nun von FHEM-PID20 in das Merkerwort MW130 der S5 geschrieben, eventuelle Fehlermeldungen von der S5 als FEH und BU zurückgeliefert werden.

16 Bit Merkerwort zum Schreiben

define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16
attr OG.hr.MW130.Mischventil IODev s5test
attr OG.hr.MW130.Mischventil alias Ventilstellung
attr OG.hr.MW130.Mischventil event-min-interval .*:600
attr OG.hr.MW130.Mischventil event-on-change-reading state
attr OG.hr.MW130.Mischventil group FBH-Mischer
attr OG.hr.MW130.Mischventil room Heizung
attr OG.hr.MW130.Mischventil sortby 01

Definition des PID-Reglers

define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:
attr PID.Test group FBH-Mischer
attr PID.Test pidActorErrorPos 0
attr PID.Test pidActorInterval 1
attr PID.Test pidCalcInterval 20
attr PID.Test pidReverseAction 1
attr PID.Test room Heizung

SPS-Konfigurationsfehler melden

define OG.hr.M1301.FEH S7_DRead flags 0 131.0
attr OG.hr.M1301.FEH IODev s5test
attr OG.hr.M1301.FEH alias SPS-Konfiguration
attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen
attr OG.hr.M1301.FEH event-min-interval .*:600
attr OG.hr.M1301.FEH event-on-change-reading state
attr OG.hr.M1301.FEH group FBH-Mischer
attr OG.hr.M1301.FEH room Heizung
attr OG.hr.M1301.FEH sortby 03

FHEM-Stellgrößen-Bereichsüberschreitung melden

define OG.hr.M1301.BU S7_DRead flags 0 131.1
attr OG.hr.M1301.BU IODev s5test
attr OG.hr.M1301.BU alias FHEM-Sollwert
attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen
attr OG.hr.M1301.BU event-min-interval .*:600
attr OG.hr.M1301.BU event-on-change-reading state
attr OG.hr.M1301.BU group FBH-Mischer
attr OG.hr.M1301.BU room Heizung
Erfolgskontrolle

Warmwasserspeicherladung mit DOIF

Wenn die Temperatur im Pufferspeicher des Holzvergasers OG.ks.DS1820.P500o deutlich höher ist als im Warmwasserspeicher OG.hr.DS1820.wwo, soll dieser geladen werden, indem das Ventil mit Hilfe eines 230 V Thermoantriebes OG.hr.M710.TAWW für den integrierten Wärmetauscher geöffnet wird. Ich benutze dazu die FHEM-Funktion DOIF.

define OG.hr.WW.oben_heizen DOIF 
            (([OG.ks.DS1820.P500o:temperature:d] > ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\
            (([OG.hr.DS1820.wwo:temperature:d] < 41) and 
             ([OG.ks.DS1820.P500o:temperature:d] > ([OG.hr.DS1820.wwo:temperature:d] + 4))))\
       (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) 
DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)
attr OG.hr.WW.oben_heizen alias TA_WW
attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen 
attr OG.hr.WW.oben_heizen do resetwait 
attr OG.hr.WW.oben_heizen group Warmwasser
attr OG.hr.WW.oben_heizen room Heizung
attr OG.hr.WW.oben_heizen sortby 04
attr OG.hr.WW.oben_heizen wait 120

Visualisierung des Heizungsschemas mit FLOORPLAN [2018]

Um einen schnellen Überblick über den Gesamtzustand der Heizungsanlage zu ermöglichen, ist die grafische Variante Floorplan besser als die FHEM-Ansicht mit Variable = Wert geeignet. Die Alternative YAF macht ebenfalls einen guten Eindruck. Sie speichert die Konfiguration aber nicht vollständig in der fhem.cfg und notwendige Anpassungen werden nur halbherzig betrieben. Die Anpassung an zukünftige Entwicklungen war für mich daher zu fraglich.

Zunächst habe ich das Heizungsschema mit [Qelectrotech 0.5] gezeichnet. Das Programm ist dazu gut geeignet, auch wenn der Name anderes suggeriert. Die fertige Zeichnung wird als PNG-Datei (oder SVG) gespeichert und als Hintergrundbild entsprechend der ausführlichen Beschreibung im Wiki eingefügt. Die Beeinflussung der Darstellungsdetails direkt über die zuständige CSS-Datei eröffnet alle Möglichkeiten ist aber sehr gewöhnungsbedürftig.

Heizungsschema

Danach können interessante Schaltzustände und Messwerte integriert und auch später noch im WEB-Interface bearbeitet werden. Details werden in der fhem.cfg gespeichert, eine Bearbeitung an dieser Stelle erscheint mir eher weniger geeignet. Für jedes interessierende Anlagendetail kann eine neue Seite des Floorplans verwendet werden.

Erfolgskontrolle

Docker mit Integration von Nodered, MQTT, IOBroker [2022]

Nodered ist m.E. eine ideale Ergänzung zu FHEM und ein attraktives visuelles Frontend. Für die Integration habe ich mich an den Videos von Matthias Kleine und seiner Seite Hausautomatisierung orientiert.

Für FHEM und angrenzende Dienste gibt es für den Raspi ein offizielles Docker-Image, welches offenbar auch auf Vorarbeiten von Matthias zurück geht. Ich zeige, wie meine bestehende Installation in den Container umzog.

Vorbereitung

Ich habe mich entschlossen, auch aus Sicherheitsgründen, auf einer neuen SD-Karte, hier in einem neuen Raspi4, ein komplett neues System aufzusetzen. Ein Raspi3 würde aber genügen.

Raspberry PI OS Lite (32-bit) auf der SDC installieren
Raspberry PI OS Lite (32-bit) auf der SDC installieren


Der Imager lässt sich auf einem Ubuntu-PC so installieren:

sudo apt update

sudo apt install snapd

sudo snap install rpi-imager

Nach dem Start des neuen Systems, mit sudo raspi-config folgende Einstellungen ändern:

  1. System Options -> Password
  2. Interface Options -> SSH
  3. Localisation Options -> L1 bis L4

Docker kann nach dem SSH-Login ssh pi@<raspi-IP> nach Anleitung auf dem Raspi installiert werden:

sudo apt-get update

sudo apt-get upgrade

sudo reboot

sudo apt-get install wget git apt-transport-https vim telnet

curl -sSL https://get.docker.com | sh

sudo systemctl enable docker

sudo systemctl start docker

sudo usermod -aG docker pi

cd /srv

git clone -b raspbian https://github.com/klein0r/fhem-docker.git fhem-docker

cd fhem-docker

sudo apt-get install python-pip

sudo pip install docker-compose

exit

Dann erneut per ssh anmelden.

cd fhem-docker
docker-compose up

Sollte der Fehler:

ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &main::DockerImageInfo_HealthCheck called at (eval 47) line 1.

auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:

define myDIInfo DockerImageInfo

attr myDIInfo DbLogExclude .*

attr myDIInfo alias Docker Image Info

attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red

attr myDIInfo group Update

attr myDIInfo icon docker

attr myDIInfo room System

Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter <raspi-ip>:8083/fhem sollte nach ein paar Minuten ein optisch und technisch entstaubtes FHEM (und auf anderen Ports die anderen Dienste) zu sehen sein. Falls keine Fehlermeldungen in der SSH-Session zu sehen sind, docker-compose mit <Strg>+<c> abbrechen und die Container im Hintergurnd neu starten mit:

docker-compose up -d

Da die Version von FHEM schon älter ist, Eingabe von update in die FHEM-Kommandozeile im Browser.

Serielle Schnittstellen anpassen

Die Module S7 und OWX brauchen im Container die seriellen Schnittstellen. Diese sind standardmäßig nicht dabei. Nach Anleitung wird die /dev/ttyAMA0 für die S5 zunächst auf dem Raspi aktiviert:

$ sudo nano /boot/config.txt

am Ende hinzufügen:

enable_uart=1
dtoverlay=pi3-disable-bt

sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service

Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:

Datei mit unten stehendem Inhalt anlegen: /etc/udev/rules.d/99-ttyAMA0.rules:

KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”

KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”

KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”

KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”

Aktivierung der Rules mit:

sudo udevadm control --reload-rules && sudo udevadm trigger

Gruppenzugehörigkeit ändern:

sudo chgrp -h tty /dev/serial0

sudo chgrp -h tty /dev/serial1

sudo chgrp -h tty /dev/serial2

sudo chgrp -h tty /dev/serial3

Pi-User zuordnen:

sudo adduser $USER tty

sudo adduser $USER dialout

Eigentümer setzen:

sudo chmod g+r /dev/ttyUSB0

sudo chmod g+r /dev/ttyUSB1

sudo chmod g+r /dev/ttyUSB2

sudo chmod g+r /dev/ttyAMA0

sudo reboot

Erfolgskontrolle auf dem Raspi: ls -l /dev sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.

Anpassung von /home/pi/fhem-docker/docker-compose.yml

Für OWX ist die feste Zuordnung mehrerer Onewire-Adapter wichtig. Dieser Befehl zeigt eindeutige Namen, die auch nach dem Umstecken der USB-Stecker gültig bleiben:

ls -l /dev/serial/by-id

Das Ergebnis sieht bei mir so aus:

lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -> ../../ttyUSB0

lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -> ../../ttyUSB2

lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -> ../../ttyUSB3

Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:

networks:
        - fhem-network
devices:
     #  - "/dev/ttyUSB0:/dev/ttyUSB0"
        - "/dev/ttyAMA0:/dev/ttyAMA0"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2"
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1"

Nach dem Speichern der docker-compose.yml, die Container mit docker-compose down bzw. docker-compose up -d neustarten.

Erfolgskontrolle auf der Pi-Konsole mit docker exec -it fhem-docker_fhem_1 /bin/bash:

# ls -l /dev

..

crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1

crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2

crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3

..

exit

Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:

define myS5 S7 S5 /dev/ttyAMA0 sollte im Webinterface zum state connected führen.

define onewire3 OWX /dev/onewire3 sollte im Webinterface zum state opened führen.

Nach einiger Zeit sollte per get onewire1 devices eine Liste der angeschlossenen OW-Geräte sichtbar sein:

Auf dem Bus onewire1 gefundene Sensoren

Damit ist alles bereit und die Test-Geräte S7 und OWX müssen im Webinterface gelöscht und die eventuell automatisch erkannten Sensoren manuell aus der fhem.cfg entfernt werden. Danach FHEM shutdown restart.

Multicast-Empfang mit Docker

Die Integration der SMA-PV-Anlage wird bei mir durch das Modul SMAEM erledigt, welches den gesendeten Multicast von HM20 bzw. EM10 für FHEM bereitstellen kann. Diese funktionieren mit Multicast, den das Standard-Bridge-Docker-Netzwerk nicht weiterleiten mag. Der Maintainer des Moduls, Volker Kettenbach, hat dafür in diesem Forenbeitrag eine Lösung vorgeschlagen, die ich hier realisiert habe. Die zugehörige Definition: raspi docker-compose.yml.

Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:

docker network create -d macvlan -o parent=eth0 --subnet=192.168.31.0/24 --gateway=192.168.31.254 --ip-range=192.168.31.0/28 mymacvlannetwork

Alte Konfiguration in den neuen Container übernehmen

Ich habe die neue Grundkonfiguration in der Container-fhem.cfg des Containers unverändert übernommen, alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg hinein kopiert. Nach einem shutdown restart funktionierte dann (fast) alles wie gewünscht.

Die Umstellung auf das nun eingerichtete DBlog erfordert ein wenig Überlegung und manuelle Eingriffe, belohnt aber mit schneller Darstellung von Diagrammen.

Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. Ich benutze dazu einen Raspi mit Raspi-OS und GUI. Nachdem man einen externen SD-Card-Reader angeschlossen hat, kann die eingelegte Karte direkt mit einem Befehl der GUI dupliziert werden.

Raspi-Alternative x64-ThinClient integrieren (2023)

Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in c't 6/2023 S. 34 erläuert eine ausgesuchte kompatible Alternative, die nur wenig mehr elektrische Energie benötigt und eventuell sogar preiswerter ist, einen Thin Client Fujitsu Futro S740. Damit kann die Programmiersoftware für DOS oder Windows mit Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:

  1. LUbuntu LTS vom Stick installieren,
  2. XRDP nach Anleitung installieren -> Zugriff mit Remmina-Client variable Auflösung,
  3. wine nach Anleitung installieren inklusive Prefix für 32 bit,
  4. winetricks installiert + winetricks corefonts ausgeführt, für passende Schriftarten,
  5. wine regedit benutzt, um COM1 mit /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 zu verbinden und um die Menü-Schriftgröße anzupassen.
  6. Programmiersoftware vom Datenträger installieren,
  7. Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,
  8. Docker installieren,
  9. Docker compose installieren,
  10. Multicast für SMA-Geräte,
    1. docker network create -d macvlan -o parent=eno1 --subnet=192.168.1.0/24 --gateway=192.168.1.254 --ip-range=192.168.1.0/27 mymacvlannetwork
    2. Forenthema FHEM in Docker mit IP-Adresse aus dem Host-Subnetz - nötig für Multicastempfang
  11. IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen
  12. futro-docker-compose.yml mit für die abweichende Hardware nötigen Änderungen,
  13. den FHEM-Skin entstauben,
  14. Log-DB neuaufsetzen,
  15. Umstecken der Programmierleitung zwischen FHEM und PG ist nun nicht mehr nötig. Einfach den Compose-Stack anhalten und es kann direkt losgehen. Bei Problemen hilft eventuell:
sudo modprobe -r pl2303 && sudo modprobe pl2303

Fazit

Die Simatic S5 hat es ins Docker-Zeitalter geschafft ;-) kann Daten per MQTT publishen und subscriben, (Daten mit Node-Red visualisieren und potenziell nun auch IOBroker-kompatibel werden.)

Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.