<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Krueuw</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Krueuw"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Krueuw"/>
	<updated>2026-04-12T19:44:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Step-by-step_instructions_for_exemplary_SMA_example&amp;diff=39959</id>
		<title>Step-by-step instructions for exemplary SMA example</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Step-by-step_instructions_for_exemplary_SMA_example&amp;diff=39959"/>
		<updated>2025-02-16T16:06:00Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Eine Anleitung für Einsteiger in das Modul ModbusAttr am Beispiel SMA-WEechselrichter als Unterseite hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Maximum AC Power Limit on the TP25000 in FHEM ==&lt;br /&gt;
&lt;br /&gt;
This article explains how to configure a FHEM device using the ModbusAttr module to:&lt;br /&gt;
&lt;br /&gt;
Read the current AC power (GridMs.TotW) from a TP25000 inverter.&lt;br /&gt;
Set (write) the maximum AC power limit (Pmax) into the inverter.&lt;br /&gt;
&lt;br /&gt;
In our example, the device is renamed to AB_PV17_STP25000_MaxAC and the target maximum power is set to 2000 W.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Define the Device as a Modbus Master ===&lt;br /&gt;
&lt;br /&gt;
The device is defined as a Modbus master that polls every 60 seconds via TCP:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt; &lt;br /&gt;
define AB_PV17_STP25000_MaxAC ModbusAttr 3 60 192.168.29.182:502 TCP &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC dev-h-defPoll 1 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AB_PV17_STP25000_MaxAC&#039;&#039;&#039;: Name of the FHEM device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ModbusAttr 3 60 192.168.9.182:502 TCP&#039;&#039;&#039;: Sets the device as a Modbus master with ID 3, polling every 60 seconds using Modbus TCP to the IP address 192.168.9.182 on port 502.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dev-h-defPoll 1&#039;&#039;&#039;: Ensures the device is polled regularly.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configure the Read Object for the Current AC Power ===&lt;br /&gt;
&lt;br /&gt;
The current power value is read from the holding register at address 30775 (GridMs.TotW):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt; &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h30775-reading actAC &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h30775-len 2 &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h30775-unpack N &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h30775-reading actAC&#039;&#039;&#039;: Reads the current power value from register 30775 and stores it in the reading named actAC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h30775-len 2&#039;&#039;&#039;: Indicates that 2 registers (32 bits) are read.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h30775-unpack N&#039;&#039;&#039;: Decodes the 32‑bit value as an unsigned integer in Big‑Endian format.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Configure the Write Object for the Maximum AC Power Limit ===&lt;br /&gt;
&lt;br /&gt;
The maximum AC power (Pmax) is written into the holding register at address 40915 (Inverter.WMax):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt; &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-reading maxAC &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-len 2 &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-unpack N &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-set 1 &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-setexpr $val &lt;br /&gt;
attr AB_PV17_STP25000_MaxAC obj-h40915-showGet 1 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-reading maxAC&#039;&#039;&#039;: Reads/writes the target maximum power value from register 40915 and stores it in the reading maxAC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-len 2&#039;&#039;&#039;: Specifies that 2 registers (32 bits) are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-unpack N&#039;&#039;&#039;: Decodes the 32‑bit value as unsigned in Big‑Endian format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-set 1&#039;&#039;&#039;: Enables writing to this object.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-setexpr $val&#039;&#039;&#039;: Passes the entered value directly to the register.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;obj-h40915-showGet 1&#039;&#039;&#039;: Causes an input field for the set command to appear in the web interface.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Set the Maximum AC Power ===&lt;br /&gt;
&lt;br /&gt;
To limit the maximum AC power to 2000 W, execute:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; set AB_PV17_STP25000_MaxAC maxAC 2000 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command writes the value 2000 into register 40915, thereby setting the maximum AC power limit to 2000 W.&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
The device AB_PV17_STP25000_MaxAC is configured using the ModbusAttr module to:&lt;br /&gt;
&lt;br /&gt;
Read the current AC power from registers starting at 30775 (2 registers, 32 bits) and store it as actAC.&lt;br /&gt;
&lt;br /&gt;
Write the maximum AC power limit into registers starting at 40915 (2 registers, 32 bits).&lt;br /&gt;
&lt;br /&gt;
With obj-h40915-showGet 1, an input field appears in the web interface so that you can directly enter a new value.&lt;br /&gt;
&lt;br /&gt;
To monitor the current power, use: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; get AB_PV17_STP25000_MaxAC actAC &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the maximum power to 2000 W, use: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; set AB_PV17_STP25000_MaxAC maxAC 2000 &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39958</id>
		<title>ModbusAttr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39958"/>
		<updated>2025-02-16T15:48:21Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Configuration of the module as master or passive listener */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Extract information from devices with a Modbus interface or send information to such devices &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ModbusAttr&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModFTopic=25315&lt;br /&gt;
|ModTechName=98_ModbusAttr.pm&lt;br /&gt;
|ModOwner=StefanStrobel ({{Link2FU|3960|Forum}} / [[Benutzer:StefanStrobel|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ModbusAttr]] uses the low level Modbus module 98_[[Modbus]].pm to provide a generic Modbus module (as master, slave, relay or passive listener) &lt;br /&gt;
that can be configured by attributes similar to the way HTTPMOD works for devices with a web interface.&lt;br /&gt;
&lt;br /&gt;
ModbusAttr can be used as a Modbus master that queries data from other devices over a serial RS232 / RS485 or TCP connection, &lt;br /&gt;
it can be used as a Modbus slave that can make readings of Fhem devices available via Modbus to external Modbus masters,&lt;br /&gt;
it can act as a Modbus relay that receives requests over one connection and forwards them over another connection (e.g. from Modbus TCP to serial Modbus RTU)&lt;br /&gt;
or it can passively listen to other devices that communicate over a serial RS485 connection and extract readings from the objects it sees.&lt;br /&gt;
The supported protocols are Modbus RTU, Modbus ASCII or Modbus TCP.&lt;br /&gt;
&lt;br /&gt;
There are several attributes that modify the way data objects are converted before they are stored in readings or sent to a device. Data can be modified by a perl expression defined in an atribute, formatted with a format string defined in another attribute or mapped to a table defined in an attribute.&lt;br /&gt;
&lt;br /&gt;
Readings can directly correspond to one data object or they can span several objects. A float value for example might be stored in two input or holding registers in the Modbus device. By specifying attributes that define the length of a reading in objects and by specifying the unpack code to get from a raw string to perl variables, all these cases can be described by attributes and no perl coding is necessary.&lt;br /&gt;
&lt;br /&gt;
== Availability == &lt;br /&gt;
The module has been checked in.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
This module uses the [[Modbus|Modbus base module 98_Modbus.pm]] which uses the DevIO module&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus master == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;iodevice&amp;gt; Modbus /dev/device@baudrate,bits,parity,stop&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;RTU|ASCII&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the first case the module connects to the external Modbus device with Modbus Id &amp;lt;Id&amp;gt; through a serial modbus device (RS232 or RS485).&lt;br /&gt;
&lt;br /&gt;
In the second case it connects directly through Modbus TCP or Modbus RTU or ASCII over TCP.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;Interval&amp;gt; is not 0 then the module actively requests data from that device every &amp;lt;Interval&amp;gt; seconds.&lt;br /&gt;
&lt;br /&gt;
The objects that the module should request and the readings it should create from these objects have to be defined with attributes (see below). &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
Interval can be 0 in which case the Module only requests data when it is triggered with a Fhem get-Command.&lt;br /&gt;
With this mode a Fhem installation can for example query sensor data from a heating system, energy meter or solar power installation if these systems offer a Modbus interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 1 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 20 0 ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine with Modbus ASCII. &lt;br /&gt;
Use Modbus Id 20 and don&#039;t query the device in a defined interval. Instead individual SET / GET options have to be used for communication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 5 60 192.168.1.122:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus TCP to a device with IP-Address 192.168.1.122 and the reserved port for Modbus TCP 502&lt;br /&gt;
Note that for Modbus over a TCP connection you don&#039;t need a basic Modbus device for the interface like ModbusLine above. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 3 60 192.168.1.122:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus RTU over TCP and use the port number 8000&lt;br /&gt;
    &lt;br /&gt;
== Define as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will respond to their requests if the requests contain the given Modbus &amp;lt;Id&amp;gt;&lt;br /&gt;
To provide data with Modbus to external Modbus masters a mapping needs to be defined using attributes. &lt;br /&gt;
These attributes will define a mapping from Readings inside Fhem to so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; and their Modbus object address together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example supply data to a PLC that actively reads data from Fhem or writes data to Fhem readings.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define Data4PLC as a Modbus slave that communicates through the Modbus serial interface device named MRS485 to listen for Modbus requests with Id 1. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 20 slave ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen for Modbus requests with Id 20 with Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 5 slave 192.168.1.2:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to start listening to TCP port 502 on the local address 192.168.1.2. Modbus TCP will be used as protocol and Requests with Modbus Id 5 will be answered.&lt;br /&gt;
&lt;br /&gt;
Please be aware that opening a port number smaller than 1024 needs root permissions on Unix devices. So it is probably better to use a non standard port number above 1024 instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 3 slave 192.168.1.2:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen to the local port 8000 and talk Modbus RTU over TCP&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus passive listener == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; passive &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module listens on a serial (RS485) connection for modbus communication with the given Modbus &amp;lt;Id&amp;gt; and extracts readings. It does not send requests by itself but waits for another master to communicate with a slave. So only objects that the other master requests can be seen by Fhem in this configuration. &lt;br /&gt;
The objects that the module recognizes and the readings that it should create from these objects have to be defined with attributes (see below) in the same way as for a Modbus master. &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example Listen to the communication between an energy counter as slave and a solar control system as master if they use Modbus RTU over RS485. Since only one Master is allowed when using Modbus over serial lines, Fhem can not be master itself. As a passive listener it can however see when the master queries e.g. the current power consumption and then also see the reply from the energy meter and store the value in a Fhem reading.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 1 passive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passively listen for Modbus requests and replies with Id 1 over a serial interface managed by an already defined basic modbus device named MB-485. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 20 passive ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passivel listen for Modbus requests / replies with Id 20 and Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
== Define as Modbus relay == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for a relay from a serial line to a defined master or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt; to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For a relay that listens to modbus requests from a network connection.&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will forward requests if they match the given Modbus &amp;lt;Id&amp;gt; to an already defined Modbus Master device inside Fhem which will send them to its defined slave, take the reply and then pass it back to the original Master.&lt;br /&gt;
With this mode a Fhem installation can for example be used in front of a device that only speaks Modbus RTU over RS485 to make it available via Modbus TCP over the local network. &lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define Heating ModbusAttr 22 0&lt;br /&gt;
define Relay ModbusAttr 33 relay 192.168.1.2:1502 TCP to Heating&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-485 as a base device for the RS-485 communication with a heating system, &lt;br /&gt;
defines Heating as a Modbus Master to communicate with the Heating and its Modbus ID 22, &lt;br /&gt;
and then defines the relay which listens to the local IP address 192.168.1.2, TCP port 1502, Modbus Id 33 and protocol Modbus-TCP.&lt;br /&gt;
Requests coming in through Modbus TCP and port 1502 are then translated to Modbus RTU and forwarded via RS-485 to the heating system with Modbus Id 22.&lt;br /&gt;
&lt;br /&gt;
Please note that the IP address specified in the relay definition is a local IP address of the relay itself and that the port number is 1502, not 502 because Fhem running on Linux can not easily open listening port numbers below 1024 unless it is running as root.&lt;br /&gt;
&lt;br /&gt;
Other (unlikely) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-232 Modbus /dev/ttyUSB2@19200&lt;br /&gt;
define Solar ModbusAttr 7 0 192.168.1.122:502 RTU&lt;br /&gt;
define PLC2NetRelay ModbusAttr 1 ASCII relay to Solar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-232 as a base device for the RS-232 communication with a PLC as Modbus master, &lt;br /&gt;
defines Solar as a Modbus Master to communicate with Modbus TCP to a Solar power system at IP Adrress 192.168.1.122 and its Modbus ID 7, &lt;br /&gt;
and then defines the PLC2NetRelay as a relay which listens to Modbus-ASCII requests over the serial RS-232 link from a PLC to Modbus ID 1.&lt;br /&gt;
Requests to Modbus Id 1 coming in through the serial link are then translated to Modbus TCP and forwarded over the network to the solar power system with Modbus Id 7.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as master or passive listener == &lt;br /&gt;
&lt;br /&gt;
Data objects (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus master or passive listener, the attributes assign data objects of external devices (heating systems, power meters, PLCs or other) with their register addresses to readings inside fhem and control how these readings are calculated from the raw values and how they are formatted.&lt;br /&gt;
Please be aware that Modbus does not define common data types so the representation of a value can be very different from device to device. One device might make a temperature value avaliable as a floating point value that is stored in two holding resgisters, another device might store the temperature multiplied with 10 as an signed integer in one register. Even the order of bytes can vary.&lt;br /&gt;
Therefore it is typically necessary to specify the data representation as a Perl unpack code.&lt;br /&gt;
A Modbus master can also write values to Objects in the device and attributes define how this is done.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz | RNTyp=y | RNText=To set the following attributes, modify the examples and then add them to the FHEM command line at the top of the web interface. The usual procedure in the web interface is apparently only supported afterwards.}} &lt;br /&gt;
&lt;br /&gt;
Example for a Modbus master or passive configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define PWP ModbusAttr 5 30&lt;br /&gt;
attr PWP obj-h256-reading Temp_Wasser_ein&lt;br /&gt;
attr PWP obj-h256-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
attr PWP obj-h258-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h262-reading Temp_Luft&lt;br /&gt;
attr PWP obj-h262-expr $val / 10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h770-reading Temp_Soll&lt;br /&gt;
attr PWP obj-h770-expr $val / 10&lt;br /&gt;
attr PWP obj-h770-set 1&lt;br /&gt;
attr PWP obj-h770-setexpr $val * 10&lt;br /&gt;
attr PWP obj-h770-max 32&lt;br /&gt;
attr PWP obj-h770-min 10&lt;br /&gt;
attr PWP obj-h770-hint 8,10,20,25,28,29,30,30.5,31,31.5,32&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-h-combine 5&lt;br /&gt;
attr PWP dev-h-defPoll 1&lt;br /&gt;
attr PWP dev-h-defUnpack n&lt;br /&gt;
&lt;br /&gt;
attr PWP room Pool-WP&lt;br /&gt;
attr PWP stateFormat {sprintf(&amp;quot;%.1f Grad&amp;quot;, ReadingsVal($name,&amp;quot;Temp_Wasser_Ein&amp;quot;,0))}&lt;br /&gt;
attr PWP webCmd Temp_Soll&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Weiteres Beispiel - SMA Wechselrichter|Another example - SMA inverter]] &lt;br /&gt;
&lt;br /&gt;
[[Step-by-step instructions for exemplary SMA example]]&lt;br /&gt;
&lt;br /&gt;
Attributes to define data objects start with obj- followed by a code that identifies the type and address&lt;br /&gt;
of the data object. &lt;br /&gt;
&lt;br /&gt;
Modbus devices offer the following types of data objects: &lt;br /&gt;
&lt;br /&gt;
;holding registers (16 bit objects that can be read and written)&lt;br /&gt;
;input registers (16 bit objects that can only be read)&lt;br /&gt;
;coils (single bit objects that can be read and written)&lt;br /&gt;
;discrete inputs (single bit objects that can only be read)&lt;br /&gt;
&lt;br /&gt;
The module uses the first character of these data object types to define attributes. &lt;br /&gt;
Thus h770 refers to a holding register with the decimal address 770 and c120 refers to a coil with address 120. &lt;br /&gt;
The address has to be specified as pure decimal number. The address counting starts at address 0&lt;br /&gt;
&lt;br /&gt;
Please note that the documentation for devices sometimes uses different numbering. They might start counting with one instead of zero so if a voltage value is stored in input register number 107 according to the documentation of the device, it might technically mean register number 106 (in the Modbus protocol specification addresses start with 0).&lt;br /&gt;
Also some vendors use hexadecimal descriptions of their register addresses. So input register 107 might be noted as hex and means 263 or even 262 as decimal address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
defines a reading with the name Temp_Wasser_Aus that is read from the Modbus holding register at address 258.&lt;br /&gt;
With the attribute ending on &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; you can define a perl expression to do some conversion or calculation on the raw value read from the device. &lt;br /&gt;
In the above example the raw value has to be devided by 10 to get the real value. If the raw value is also the final value then no &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; attribute is necessary. &lt;br /&gt;
&lt;br /&gt;
An object attribute ending on &amp;lt;code&amp;gt;-set&amp;lt;/code&amp;gt; creates a fhem set option. &lt;br /&gt;
In the above example the reading Temp_Soll can be changed to 12 degrees by the user with the fhem command &amp;lt;code&amp;gt;set PWP Temp_Soll 12&amp;lt;/code&amp;gt;&lt;br /&gt;
The object attributes ending on &amp;lt;code&amp;gt;-min&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-max&amp;lt;/code&amp;gt; define min and max values for input validation &lt;br /&gt;
and the attribute ending on &amp;lt;code&amp;gt;-hint&amp;lt;/code&amp;gt; will tell fhem to create a selection list so the user can graphically select the defined values.&lt;br /&gt;
&lt;br /&gt;
To define general properties of the device you can specify attributes starting with &amp;lt;code&amp;gt;dev-&amp;lt;/code&amp;gt;. &lt;br /&gt;
E.g. with &amp;lt;code&amp;gt;dev-timing-timeout&amp;lt;/code&amp;gt; you can specify the timeout when waiting for a response from the device. &lt;br /&gt;
With &amp;lt;code&amp;gt;dev-h-&amp;lt;/code&amp;gt; you can specify several default values or general settings for all holding registers &lt;br /&gt;
like the function code to be used when reading or writing holding registers. &lt;br /&gt;
These attributes are optional and the module will use defaults that work in most cases. &lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-combine 5&amp;lt;/code&amp;gt; for example allows the module to combine read requests to objects having an address that differs 5 or less into one read request. &lt;br /&gt;
Without setting this attribute the module will start individual read requests for each object. &lt;br /&gt;
Typically the documentation for the modbus interface of a given device states the maximum number of objects that can be read in one function code 3 request.&lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-defUnpack n&amp;lt;/code&amp;gt; means that the values in this example that the values are stored as unsigned short (16-bit) in &amp;quot;network&amp;quot; (big-endian) order. This is only one possibility of many. An integer value might be signed instead of unsigned or it might use different byte ordering (e.g. unpack codes v or s).&lt;br /&gt;
&lt;br /&gt;
== Handling Data Types == &lt;br /&gt;
&lt;br /&gt;
The Modbus protocol does not define data types. If the documentation of a device states that for example the current temperature is stored in holding register 102 this leaves room for many interpretations. Not only can the address 102 mean different things (actually decimal 102 or rather 101 if the vendor starts counting at 1 instead of 0 or even 257 or 258 if the vendor used hexadecimal addresses in his documentation ) also the data representation can be many different things. As in every programming language, there are many ways to represent numbers. They can be stored signed or unsigned, they can be integers or floating point numbers, the byte-order can be &amp;quot;big endian&amp;quot; or &amp;quot;small endian&amp;quot;, the value can be stored in one holding register or in two holding registers (floating point numbers typically take four bytes which means two holding registers).&lt;br /&gt;
The Modbus module allows flexible configuration of data representations be assigning a Perl unpack-code, a length, a Perl Expression, and the register ordering. The following example illustrates how this can be done:        &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h338-reading Pressure&lt;br /&gt;
attr PWP obj-h338-len 2&lt;br /&gt;
attr PWP obj-h338-unpack f&amp;gt;&lt;br /&gt;
attr PWP obj-h338-revRegs 1&lt;br /&gt;
attr PWP obj-h338-format %.2f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In This example a floating point value for the reading &amp;quot;Pressure&amp;quot; is read from the holding registers starting at address 338. &lt;br /&gt;
The value occupies 32 Bits and is therefore stored in two registers. The Perl pack code to use is f&amp;gt; which means a native single precision float in big endian format (byte order). With revRegs the module is instructed to reverse the order of the registers directly after reading. The format specification then defines how the value is formatted into a reading - in this case with two digits after the comma. See http://perldoc.perl.org/functions/pack.html for Perl pack / unpack codes and http://perldoc.perl.org/functions/sprintf.html for format specifications.&lt;br /&gt;
&lt;br /&gt;
If you need to read / write many objects for a device, defining all these parameters each time is not elegant. The Modbus module therefore offers twi ways to simplify this task: &lt;br /&gt;
You can define defaults for every type of object or you can define your own data types once and then refer to them.&lt;br /&gt;
This exampe shows how defaults can be specified for holding registers and input registers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP dev-h-defUnpack f&amp;gt;&lt;br /&gt;
attr PWP dev-h-defLen 2&lt;br /&gt;
attr PWP dev-h-defRevRegs 1&lt;br /&gt;
attr PWP dev-h-defFormat %.2f&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-i-defUnpack n&lt;br /&gt;
attr PWP dev-i-defLen 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next example shows how you can define your own data types and then apply them to objects:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WP dev-type-VT_R4-format %.1f&lt;br /&gt;
attr WP dev-type-VT_R4-len 2&lt;br /&gt;
attr WP dev-type-VT_R4-revRegs 1&lt;br /&gt;
attr WP dev-type-VT_R4-unpack f&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr WP obj-h1234-reading Temp_In&lt;br /&gt;
attr WP obj-h1234-type VT_R4&lt;br /&gt;
attr WP obj-h1236-reading Temp_Out&lt;br /&gt;
attr WP obj-h1236-type VT_R4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This example defines a data type with the name VT_R4 which uses an unpack code of f&amp;gt;, length 2 and reversed register ordering. It then assigns this Type to the objects Temp_In and Temp_Out.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
Data objects that the module offers to external Modbus masters (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus slave, the attributes assign readings of Fhem devices to Modbus objects with their addresses and control how these objects are calculated from the reading values that exist in Fhem.&lt;br /&gt;
It is also possible to allow an external Modbus master to send write function codes and change the value of readings inside Fhem.&lt;br /&gt;
&lt;br /&gt;
Example for a Modbus slave configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
attr Data4PLC IODev MRS485&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h256-reading THSensTerrasse:temperature&lt;br /&gt;
attr Data4PLC obj-h256-unpack f&lt;br /&gt;
attr Data4PLC obj-h256-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h258-reading THSensTerrasse:humidity&lt;br /&gt;
attr Data4PLC obj-h258-unpack f&lt;br /&gt;
attr Data4PLC obj-h258-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h260-reading myDummy:limit&lt;br /&gt;
attr Data4PLC obj-h260-unpack n&lt;br /&gt;
attr Data4PLC obj-h260-len 1&lt;br /&gt;
attr Data4PLC obj-h260-allowWrite 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example Fhem allows an external Modbus master to read the temperature of a Fhem device named THSensTerrasse through holding register 256 and the humidity of that Fhem device through holding register 258. Both are encoded as floting point values that span two registers. &lt;br /&gt;
The master can also read but also write the reading named limit of the device myDummy.&lt;br /&gt;
&lt;br /&gt;
== Set-Commands ==&lt;br /&gt;
can be defined for holding registers and coils by using attributes.&lt;br /&gt;
&lt;br /&gt;
Every object for which an attribute like &amp;lt;code&amp;gt;obj-xy-set&amp;lt;/code&amp;gt; is set to 1 will create a valid set option.&lt;br /&gt;
&lt;br /&gt;
Additionally the attribute &amp;lt;code&amp;gt;enableControlSet&amp;lt;/code&amp;gt; enables the set options &amp;lt;code&amp;gt;interval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;scanModbusObjects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;scanModbusIds&amp;lt;/code&amp;gt; (for devices connected with RTU / ASCII over a serial line).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;interval &amp;amp;lt;Interval&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:modifies the interval that was set during define. &lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops the interval timer that is used to automatically poll objects through Modbus.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;&lt;br /&gt;
:starts the interval timer that is used to automatically poll objects through Modbus. &lt;br /&gt;
:If an interval is specified during the define command then the interval timer is started automatically. &lt;br /&gt;
:However if you stop it with the command &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; stop&amp;lt;/code&amp;gt; &lt;br /&gt;
:then you can start it again with &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; start&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt;&lt;br /&gt;
:causes a read of all objects that are set to be polled in the defined interval. The interval timer is not modified.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusObjects &amp;amp;lt;startObj&amp;amp;gt; - &amp;amp;lt;endObj&amp;amp;gt; &amp;amp;lt;reqLen&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans the device objects and automatically creates attributes for each reply it gets. &lt;br /&gt;
:This might be useful for exploring devices without proper documentation. &lt;br /&gt;
:The following example starts a scan and queries the holding registers with addresses between 100 and 120. &lt;br /&gt;
:&amp;lt;code&amp;gt;set MyModbusAttrDevice scanModbusObjects h100-120&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:For each reply it gets, the module creates a reading like&lt;br /&gt;
:&amp;lt;code&amp;gt;scan-h100 hex=0021, string=.!, s=8448, s&amp;gt;=33, S=8448, S&amp;gt;=33&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:the representation of the result as hex is 0021 and&lt;br /&gt;
:the ASCII representation is .!. s, s&amp;gt;, S and S&amp;gt; are different representations with their Perl pack-code.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusIds &amp;amp;lt;startId&amp;amp;gt; - &amp;amp;lt;endId&amp;amp;gt; &amp;amp;lt;knownObj&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans for Modbus Ids on an RS485 Bus. The following set command for example starts a scan:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Device scanModbusId 1-7 h770&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:since many Modbus devices don&#039;t reply at all if an object is requested that does not exist, &lt;br /&gt;
:scanModbusId needs the adress of an object that is known to exist.&lt;br /&gt;
:If a device with Id 5 replies to a read request for holding register 770, a reading like the following will be created:&lt;br /&gt;
:&amp;lt;code&amp;gt;scanId-5-Response-h770 hex=0064, string=.d, s=25600, s&amp;gt;=100, S=25600, S&amp;gt;=100&amp;lt;/code&amp;gt;&lt;br /&gt;
;&amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops any running scans.&lt;br /&gt;
;saveAsModule &amp;lt;name&amp;gt;&lt;br /&gt;
:experimental: saves the definitions of obj- and dev- attributes in a new fhem module file as /tmp/98_ModbusGen&amp;lt;name&amp;gt;.pm.&lt;br /&gt;
:if this file is copied into the fhem module subdirectory (e.g. /opt/fhem/FHEM) and fhem is restarted then instead of defining a device&lt;br /&gt;
:as ModbusAttr with all the attributes to define objects, you can just define a device of the new type ModbusGen&amp;lt;name&amp;gt; and all the &lt;br /&gt;
:objects will be there by default. However all definitions can still be changed / overriden with the attribues defined in ModbusAttr if needed.&lt;br /&gt;
&lt;br /&gt;
== Get-Commands ==&lt;br /&gt;
&lt;br /&gt;
Every reading can be manually requested by a Get. &lt;br /&gt;
Internally a Get command triggers the corresponding Modbus request to the device and the module then interprets the data and sets the right Fhem readings. To avoid huge option lists in FHEMWEB, the objects visible as Get in FHEMWEB can be defined by setting an attribute &amp;lt;code&amp;gt;obj-xy-showGet&amp;lt;/code&amp;gt; to 1.&lt;br /&gt;
&lt;br /&gt;
== All Attributes ==&lt;br /&gt;
&lt;br /&gt;
;readingFnAttributes&lt;br /&gt;
:the usual Fhem attributes for all devices&lt;br /&gt;
&lt;br /&gt;
;alignTime&lt;br /&gt;
:Aligns each periodic read request for the defined interval to this base time. &lt;br /&gt;
:This is typcally something like 00:00 (see the Fhem at command)&lt;br /&gt;
&lt;br /&gt;
;enableControlSet&lt;br /&gt;
:enables the built in set commands like interval, stop, start and reread (see above)        &lt;br /&gt;
&lt;br /&gt;
the following list of attributes can be applied to any data object by specifying the objects type and address in the variable part. &lt;br /&gt;
For many attributes you can also specify default values per object type (see dev- attributes later) or you can specify an object attribute without type and address (e.g. obj-len) which then applies as default for all objects:&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-reading &lt;br /&gt;
:define the name of a reading that corresponds to the Modbus data object of type c,d,i or h and a decimal address (e.g. obj-h225-reading).&lt;br /&gt;
	&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-name &lt;br /&gt;
:defines an optional internal name of this data object (this has no meaning for fhem and serves mainly documentation purposes.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-set &lt;br /&gt;
:if set to 1 then this data object can be changed (works only for holding registers and coils since discrete inputs and input registers can not be modified by definition.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-min &lt;br /&gt;
:defines a lower limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-max &lt;br /&gt;
:defines an upper limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-hint &lt;br /&gt;
:this is used for set options and tells fhemweb what selection to display for the set option (list or slider etc.)&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-expr &lt;br /&gt;
:defines a perl expression that converts the raw value read from the device.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-ignoreExpr&lt;br /&gt;
:defines a perl expression that returns 1 if a value should be ignored and the existing reading should not be modified&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-map &lt;br /&gt;
:defines a map to convert values read from the device to more convenient values when the raw value is read from the device or back when the value to write has to be converted from the user value to a raw value that can be written. Example: 0:mittig, 1:oberhalb, 2:unterhalb &lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-setexpr &lt;br /&gt;
:defines a perl expression that converts the user specified value in a set to a raw value that can be sent to the device. This is typically the inversion of -expr above.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-format &lt;br /&gt;
:defines a format string to format the value read e.g. %.1f&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-len &lt;br /&gt;
:defines the length of the data object in registers. It defaults to 1. Some devices store 32 bit floating point values in two registers. In this case you can set this attribute to two.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-unpack &lt;br /&gt;
:defines the unpack code to convert the raw data string read from the device to a reading. For an unsigned integer in big endian format this would be &amp;quot;n&amp;quot;, for a signed 16 bit integer in big endian format this would be &amp;quot;s&amp;gt;&amp;quot; and for a 32 bit big endian float value this would be &amp;quot;f&amp;gt;&amp;quot;. (see the perl documentation of the pack function).&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-revRegs&lt;br /&gt;
:this is only applicable to objects that span several input registers or holding registers.&lt;br /&gt;
:when they are read then the order of the registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string. &lt;br /&gt;
:The same happens before the object is written with a set command.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-bswapRegs&lt;br /&gt;
:this is applicable to objects that span several input or holding registers.&lt;br /&gt;
:After the registers have been read and before they are writtem, &lt;br /&gt;
:all 16-bit values are treated big-endian and are reversed to little-endian by swapping the two 8 bit bytes. &lt;br /&gt;
:This functionality is most likely used for reading (ASCII) strings from the device &lt;br /&gt;
:that are stored as big-endian 16-bit values.&lt;br /&gt;
:example: original reading is &amp;quot;324d3130203a57577361657320722020&amp;quot;. After applying bswapRegs, &lt;br /&gt;
:the value will be &amp;quot;4d3230313a2057576173736572202020&amp;quot; which will result in the ASCII string &lt;br /&gt;
:&amp;quot;M201: WWasser   &amp;quot;. &lt;br /&gt;
:Should be used with &amp;quot;(a*)&amp;quot; as -unpack value.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-decode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function decode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 instead of utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-encode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function encode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-showGet &lt;br /&gt;
:every reading can also be requested by a get command. However these get commands are not automatically offered in fhemweb. By specifying this attribute, the get will be visible in fhemweb.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-poll&lt;br /&gt;
:if set to 1 then this obeject is included in the cyclic update request as specified in the define command. If not set, then the object can manually be requested with a get command, but it is not automatically updated each interval. Note that this setting can also be specified as default for all objects with the dev- atributes described later.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-polldelay &lt;br /&gt;
:this attribute allows to poll objects at a lower rate than the interval specified in the define command. you can either specify a time in seconds or number prefixed by &amp;quot;x&amp;quot; which means a multiple of the interval of the define command. if you specify a normal numer then it is interpreted as minimal time between the last read and another automatic read. Please note that this does not create an individual interval timer. Instead the normal interval timer defined by the interval of the define command will check if this reading is due or not yet. So the effective interval will always be a multiple of the interval of the define.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*read &lt;br /&gt;
:specifies the function code to use for reading this type of object. The default is 3 for holding registers, 1 for coils, 2 for discrete inputs and 4 for input registers.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*write &lt;br /&gt;
:specifies the function code to use for writing this type of object. The default is 6 for holding registers and 5 for coils. Discrete inputs and input registers can not be written by definition.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*combine &lt;br /&gt;
:defines how many adjacent objects can be read in one request. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defLen &lt;br /&gt;
:defines the default length for this object type. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defFormat &lt;br /&gt;
:defines a default format string to use for this object type in a sprintf function on the values read from the device.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defExpr&lt;br /&gt;
:defines a default Perl expression to use for this object type to convert raw values read.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defIgnoreExpr&lt;br /&gt;
:defines a default Perl expression to decide when values should be ignored.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defUnpack &lt;br /&gt;
:defines the default unpack code for this object type. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defRevRegs&lt;br /&gt;
:defines that the order of registers for objects that span several registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defBswapRegs&lt;br /&gt;
:per device default for swapping the bytes in Registers (see obj-bswapRegs above)&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defDecode&lt;br /&gt;
:defines a default for decoding the strings read from a different character set e.g. cp850&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defEncode&lt;br /&gt;
:defines a default for encoding the strings read (or after decoding from a different character set) e.g. utf8&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defPoll &lt;br /&gt;
:if set to 1 then all objects of this type will be included in the cyclic update by default. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defShowGet &lt;br /&gt;
:if set to 1 then all objects of this type will have a visible get by default. &lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*allowShortResponses &lt;br /&gt;
:if set to 1 the module will accept a response with valid checksum but data lengh &amp;lt; lengh in header&lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;nextOpenDelay &lt;br /&gt;
:delay for Modbus-TCP connections. &lt;br /&gt;
:This defines how long the module should wait after a failed TCP connection attempt before the next reconnection attempt. &lt;br /&gt;
:This defaults to 60 seconds.&lt;br /&gt;
&lt;br /&gt;
;openTimeout     &lt;br /&gt;
:timeout to be used when opening a Modbus TCP connection (defaults to 3)&lt;br /&gt;
&lt;br /&gt;
;timeoutLogLevel &lt;br /&gt;
:log level that is used when logging a timeout. Defaults to 3. &lt;br /&gt;
&lt;br /&gt;
;silentReconnect &lt;br /&gt;
:if set to 1, then it will set the loglevel for &amp;quot;disconnected&amp;quot; and &amp;quot;reappeared&amp;quot; messages to 4 instead of 3&lt;br /&gt;
&lt;br /&gt;
;maxTimeoutsToReconnect &lt;br /&gt;
:this attribute is only valid for TCP connected devices. &lt;br /&gt;
:In such cases a disconnected device might stay undetected and lead to timeouts until the TCP connection is reopened. &lt;br /&gt;
:This attribute specifies after how many timeouts an automatic reconnect is tried.&lt;br /&gt;
&lt;br /&gt;
;dev-h-brokenFC3&lt;br /&gt;
:workaround for some broken Modbus function code 3 implementations&lt;br /&gt;
&lt;br /&gt;
;disable&lt;br /&gt;
:stop communication with the device while this attribute is set to 1. For Modbus over TCP this also closes the TCP connection.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.Modbus.org Modbus.org]&lt;br /&gt;
* About Modbus ([http://en.wikipedia.org/wiki/Modbus English] / [http://de.wikipedia.org/wiki/Modbus German])&lt;br /&gt;
* Perl [http://perldoc.perl.org/functions/pack.html unpack codes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39279</id>
		<title>ModbusAttr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39279"/>
		<updated>2024-04-22T20:04:45Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Configuration of the module as master or passive listener */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Extract information from devices with a Modbus interface or send information to such devices &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ModbusAttr&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModFTopic=25315&lt;br /&gt;
|ModTechName=98_ModbusAttr.pm&lt;br /&gt;
|ModOwner=StefanStrobel ({{Link2FU|3960|Forum}} / [[Benutzer:StefanStrobel|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ModbusAttr]] uses the low level Modbus module 98_[[Modbus]].pm to provide a generic Modbus module (as master, slave, relay or passive listener) &lt;br /&gt;
that can be configured by attributes similar to the way HTTPMOD works for devices with a web interface.&lt;br /&gt;
&lt;br /&gt;
ModbusAttr can be used as a Modbus master that queries data from other devices over a serial RS232 / RS485 or TCP connection, &lt;br /&gt;
it can be used as a Modbus slave that can make readings of Fhem devices available via Modbus to external Modbus masters,&lt;br /&gt;
it can act as a Modbus relay that receives requests over one connection and forwards them over another connection (e.g. from Modbus TCP to serial Modbus RTU)&lt;br /&gt;
or it can passively listen to other devices that communicate over a serial RS485 connection and extract readings from the objects it sees.&lt;br /&gt;
The supported protocols are Modbus RTU, Modbus ASCII or Modbus TCP.&lt;br /&gt;
&lt;br /&gt;
There are several attributes that modify the way data objects are converted before they are stored in readings or sent to a device. Data can be modified by a perl expression defined in an atribute, formatted with a format string defined in another attribute or mapped to a table defined in an attribute.&lt;br /&gt;
&lt;br /&gt;
Readings can directly correspond to one data object or they can span several objects. A float value for example might be stored in two input or holding registers in the Modbus device. By specifying attributes that define the length of a reading in objects and by specifying the unpack code to get from a raw string to perl variables, all these cases can be described by attributes and no perl coding is necessary.&lt;br /&gt;
&lt;br /&gt;
== Availability == &lt;br /&gt;
The module has been checked in.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
This module uses the [[Modbus|Modbus base module 98_Modbus.pm]] which uses the DevIO module&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus master == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;iodevice&amp;gt; Modbus /dev/device@baudrate,bits,parity,stop&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;RTU|ASCII&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the first case the module connects to the external Modbus device with Modbus Id &amp;lt;Id&amp;gt; through a serial modbus device (RS232 or RS485).&lt;br /&gt;
&lt;br /&gt;
In the second case it connects directly through Modbus TCP or Modbus RTU or ASCII over TCP.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;Interval&amp;gt; is not 0 then the module actively requests data from that device every &amp;lt;Interval&amp;gt; seconds.&lt;br /&gt;
&lt;br /&gt;
The objects that the module should request and the readings it should create from these objects have to be defined with attributes (see below). &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
Interval can be 0 in which case the Module only requests data when it is triggered with a Fhem get-Command.&lt;br /&gt;
With this mode a Fhem installation can for example query sensor data from a heating system, energy meter or solar power installation if these systems offer a Modbus interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 1 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 20 0 ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine with Modbus ASCII. &lt;br /&gt;
Use Modbus Id 20 and don&#039;t query the device in a defined interval. Instead individual SET / GET options have to be used for communication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 5 60 192.168.1.122:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus TCP to a device with IP-Address 192.168.1.122 and the reserved port for Modbus TCP 502&lt;br /&gt;
Note that for Modbus over a TCP connection you don&#039;t need a basic Modbus device for the interface like ModbusLine above. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 3 60 192.168.1.122:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus RTU over TCP and use the port number 8000&lt;br /&gt;
    &lt;br /&gt;
== Define as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will respond to their requests if the requests contain the given Modbus &amp;lt;Id&amp;gt;&lt;br /&gt;
To provide data with Modbus to external Modbus masters a mapping needs to be defined using attributes. &lt;br /&gt;
These attributes will define a mapping from Readings inside Fhem to so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; and their Modbus object address together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example supply data to a PLC that actively reads data from Fhem or writes data to Fhem readings.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define Data4PLC as a Modbus slave that communicates through the Modbus serial interface device named MRS485 to listen for Modbus requests with Id 1. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 20 slave ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen for Modbus requests with Id 20 with Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 5 slave 192.168.1.2:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to start listening to TCP port 502 on the local address 192.168.1.2. Modbus TCP will be used as protocol and Requests with Modbus Id 5 will be answered.&lt;br /&gt;
&lt;br /&gt;
Please be aware that opening a port number smaller than 1024 needs root permissions on Unix devices. So it is probably better to use a non standard port number above 1024 instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 3 slave 192.168.1.2:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen to the local port 8000 and talk Modbus RTU over TCP&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus passive listener == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; passive &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module listens on a serial (RS485) connection for modbus communication with the given Modbus &amp;lt;Id&amp;gt; and extracts readings. It does not send requests by itself but waits for another master to communicate with a slave. So only objects that the other master requests can be seen by Fhem in this configuration. &lt;br /&gt;
The objects that the module recognizes and the readings that it should create from these objects have to be defined with attributes (see below) in the same way as for a Modbus master. &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example Listen to the communication between an energy counter as slave and a solar control system as master if they use Modbus RTU over RS485. Since only one Master is allowed when using Modbus over serial lines, Fhem can not be master itself. As a passive listener it can however see when the master queries e.g. the current power consumption and then also see the reply from the energy meter and store the value in a Fhem reading.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 1 passive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passively listen for Modbus requests and replies with Id 1 over a serial interface managed by an already defined basic modbus device named MB-485. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 20 passive ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passivel listen for Modbus requests / replies with Id 20 and Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
== Define as Modbus relay == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for a relay from a serial line to a defined master or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt; to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For a relay that listens to modbus requests from a network connection.&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will forward requests if they match the given Modbus &amp;lt;Id&amp;gt; to an already defined Modbus Master device inside Fhem which will send them to its defined slave, take the reply and then pass it back to the original Master.&lt;br /&gt;
With this mode a Fhem installation can for example be used in front of a device that only speaks Modbus RTU over RS485 to make it available via Modbus TCP over the local network. &lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define Heating ModbusAttr 22 0&lt;br /&gt;
define Relay ModbusAttr 33 relay 192.168.1.2:1502 TCP to Heating&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-485 as a base device for the RS-485 communication with a heating system, &lt;br /&gt;
defines Heating as a Modbus Master to communicate with the Heating and its Modbus ID 22, &lt;br /&gt;
and then defines the relay which listens to the local IP address 192.168.1.2, TCP port 1502, Modbus Id 33 and protocol Modbus-TCP.&lt;br /&gt;
Requests coming in through Modbus TCP and port 1502 are then translated to Modbus RTU and forwarded via RS-485 to the heating system with Modbus Id 22.&lt;br /&gt;
&lt;br /&gt;
Please note that the IP address specified in the relay definition is a local IP address of the relay itself and that the port number is 1502, not 502 because Fhem running on Linux can not easily open listening port numbers below 1024 unless it is running as root.&lt;br /&gt;
&lt;br /&gt;
Other (unlikely) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-232 Modbus /dev/ttyUSB2@19200&lt;br /&gt;
define Solar ModbusAttr 7 0 192.168.1.122:502 RTU&lt;br /&gt;
define PLC2NetRelay ModbusAttr 1 ASCII relay to Solar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-232 as a base device for the RS-232 communication with a PLC as Modbus master, &lt;br /&gt;
defines Solar as a Modbus Master to communicate with Modbus TCP to a Solar power system at IP Adrress 192.168.1.122 and its Modbus ID 7, &lt;br /&gt;
and then defines the PLC2NetRelay as a relay which listens to Modbus-ASCII requests over the serial RS-232 link from a PLC to Modbus ID 1.&lt;br /&gt;
Requests to Modbus Id 1 coming in through the serial link are then translated to Modbus TCP and forwarded over the network to the solar power system with Modbus Id 7.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as master or passive listener == &lt;br /&gt;
&lt;br /&gt;
Data objects (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus master or passive listener, the attributes assign data objects of external devices (heating systems, power meters, PLCs or other) with their register addresses to readings inside fhem and control how these readings are calculated from the raw values and how they are formatted.&lt;br /&gt;
Please be aware that Modbus does not define common data types so the representation of a value can be very different from device to device. One device might make a temperature value avaliable as a floating point value that is stored in two holding resgisters, another device might store the temperature multiplied with 10 as an signed integer in one register. Even the order of bytes can vary.&lt;br /&gt;
Therefore it is typically necessary to specify the data representation as a Perl unpack code.&lt;br /&gt;
A Modbus master can also write values to Objects in the device and attributes define how this is done.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz | RNTyp=y | RNText=To set the following attributes, modify the examples and then add them to the FHEM command line at the top of the web interface. The usual procedure in the web interface is apparently only supported afterwards.}} &lt;br /&gt;
&lt;br /&gt;
Example for a Modbus master or passive configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define PWP ModbusAttr 5 30&lt;br /&gt;
attr PWP obj-h256-reading Temp_Wasser_ein&lt;br /&gt;
attr PWP obj-h256-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
attr PWP obj-h258-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h262-reading Temp_Luft&lt;br /&gt;
attr PWP obj-h262-expr $val / 10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h770-reading Temp_Soll&lt;br /&gt;
attr PWP obj-h770-expr $val / 10&lt;br /&gt;
attr PWP obj-h770-set 1&lt;br /&gt;
attr PWP obj-h770-setexpr $val * 10&lt;br /&gt;
attr PWP obj-h770-max 32&lt;br /&gt;
attr PWP obj-h770-min 10&lt;br /&gt;
attr PWP obj-h770-hint 8,10,20,25,28,29,30,30.5,31,31.5,32&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-h-combine 5&lt;br /&gt;
attr PWP dev-h-defPoll 1&lt;br /&gt;
attr PWP dev-h-defUnpack n&lt;br /&gt;
&lt;br /&gt;
attr PWP room Pool-WP&lt;br /&gt;
attr PWP stateFormat {sprintf(&amp;quot;%.1f Grad&amp;quot;, ReadingsVal($name,&amp;quot;Temp_Wasser_Ein&amp;quot;,0))}&lt;br /&gt;
attr PWP webCmd Temp_Soll&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Weiteres Beispiel - SMA Wechselrichter|Another example - SMA inverter]] &lt;br /&gt;
&lt;br /&gt;
Attributes to define data objects start with obj- followed by a code that identifies the type and address&lt;br /&gt;
of the data object. &lt;br /&gt;
&lt;br /&gt;
Modbus devices offer the following types of data objects: &lt;br /&gt;
&lt;br /&gt;
;holding registers (16 bit objects that can be read and written)&lt;br /&gt;
;input registers (16 bit objects that can only be read)&lt;br /&gt;
;coils (single bit objects that can be read and written)&lt;br /&gt;
;discrete inputs (single bit objects that can only be read)&lt;br /&gt;
&lt;br /&gt;
The module uses the first character of these data object types to define attributes. &lt;br /&gt;
Thus h770 refers to a holding register with the decimal address 770 and c120 refers to a coil with address 120. &lt;br /&gt;
The address has to be specified as pure decimal number. The address counting starts at address 0&lt;br /&gt;
&lt;br /&gt;
Please note that the documentation for devices sometimes uses different numbering. They might start counting with one instead of zero so if a voltage value is stored in input register number 107 according to the documentation of the device, it might technically mean register number 106 (in the Modbus protocol specification addresses start with 0).&lt;br /&gt;
Also some vendors use hexadecimal descriptions of their register addresses. So input register 107 might be noted as hex and means 263 or even 262 as decimal address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
defines a reading with the name Temp_Wasser_Aus that is read from the Modbus holding register at address 258.&lt;br /&gt;
With the attribute ending on &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; you can define a perl expression to do some conversion or calculation on the raw value read from the device. &lt;br /&gt;
In the above example the raw value has to be devided by 10 to get the real value. If the raw value is also the final value then no &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; attribute is necessary. &lt;br /&gt;
&lt;br /&gt;
An object attribute ending on &amp;lt;code&amp;gt;-set&amp;lt;/code&amp;gt; creates a fhem set option. &lt;br /&gt;
In the above example the reading Temp_Soll can be changed to 12 degrees by the user with the fhem command &amp;lt;code&amp;gt;set PWP Temp_Soll 12&amp;lt;/code&amp;gt;&lt;br /&gt;
The object attributes ending on &amp;lt;code&amp;gt;-min&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-max&amp;lt;/code&amp;gt; define min and max values for input validation &lt;br /&gt;
and the attribute ending on &amp;lt;code&amp;gt;-hint&amp;lt;/code&amp;gt; will tell fhem to create a selection list so the user can graphically select the defined values.&lt;br /&gt;
&lt;br /&gt;
To define general properties of the device you can specify attributes starting with &amp;lt;code&amp;gt;dev-&amp;lt;/code&amp;gt;. &lt;br /&gt;
E.g. with &amp;lt;code&amp;gt;dev-timing-timeout&amp;lt;/code&amp;gt; you can specify the timeout when waiting for a response from the device. &lt;br /&gt;
With &amp;lt;code&amp;gt;dev-h-&amp;lt;/code&amp;gt; you can specify several default values or general settings for all holding registers &lt;br /&gt;
like the function code to be used when reading or writing holding registers. &lt;br /&gt;
These attributes are optional and the module will use defaults that work in most cases. &lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-combine 5&amp;lt;/code&amp;gt; for example allows the module to combine read requests to objects having an address that differs 5 or less into one read request. &lt;br /&gt;
Without setting this attribute the module will start individual read requests for each object. &lt;br /&gt;
Typically the documentation for the modbus interface of a given device states the maximum number of objects that can be read in one function code 3 request.&lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-defUnpack n&amp;lt;/code&amp;gt; means that the values in this example that the values are stored as unsigned short (16-bit) in &amp;quot;network&amp;quot; (big-endian) order. This is only one possibility of many. An integer value might be signed instead of unsigned or it might use different byte ordering (e.g. unpack codes v or s). &lt;br /&gt;
&lt;br /&gt;
== Handling Data Types == &lt;br /&gt;
&lt;br /&gt;
The Modbus protocol does not define data types. If the documentation of a device states that for example the current temperature is stored in holding register 102 this leaves room for many interpretations. Not only can the address 102 mean different things (actually decimal 102 or rather 101 if the vendor starts counting at 1 instead of 0 or even 257 or 258 if the vendor used hexadecimal addresses in his documentation ) also the data representation can be many different things. As in every programming language, there are many ways to represent numbers. They can be stored signed or unsigned, they can be integers or floating point numbers, the byte-order can be &amp;quot;big endian&amp;quot; or &amp;quot;small endian&amp;quot;, the value can be stored in one holding register or in two holding registers (floating point numbers typically take four bytes which means two holding registers).&lt;br /&gt;
The Modbus module allows flexible configuration of data representations be assigning a Perl unpack-code, a length, a Perl Expression, and the register ordering. The following example illustrates how this can be done:        &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h338-reading Pressure&lt;br /&gt;
attr PWP obj-h338-len 2&lt;br /&gt;
attr PWP obj-h338-unpack f&amp;gt;&lt;br /&gt;
attr PWP obj-h338-revRegs 1&lt;br /&gt;
attr PWP obj-h338-format %.2f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In This example a floating point value for the reading &amp;quot;Pressure&amp;quot; is read from the holding registers starting at address 338. &lt;br /&gt;
The value occupies 32 Bits and is therefore stored in two registers. The Perl pack code to use is f&amp;gt; which means a native single precision float in big endian format (byte order). With revRegs the module is instructed to reverse the order of the registers directly after reading. The format specification then defines how the value is formatted into a reading - in this case with two digits after the comma. See http://perldoc.perl.org/functions/pack.html for Perl pack / unpack codes and http://perldoc.perl.org/functions/sprintf.html for format specifications.&lt;br /&gt;
&lt;br /&gt;
If you need to read / write many objects for a device, defining all these parameters each time is not elegant. The Modbus module therefore offers twi ways to simplify this task: &lt;br /&gt;
You can define defaults for every type of object or you can define your own data types once and then refer to them.&lt;br /&gt;
This exampe shows how defaults can be specified for holding registers and input registers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP dev-h-defUnpack f&amp;gt;&lt;br /&gt;
attr PWP dev-h-defLen 2&lt;br /&gt;
attr PWP dev-h-defRevRegs 1&lt;br /&gt;
attr PWP dev-h-defFormat %.2f&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-i-defUnpack n&lt;br /&gt;
attr PWP dev-i-defLen 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next example shows how you can define your own data types and then apply them to objects:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WP dev-type-VT_R4-format %.1f&lt;br /&gt;
attr WP dev-type-VT_R4-len 2&lt;br /&gt;
attr WP dev-type-VT_R4-revRegs 1&lt;br /&gt;
attr WP dev-type-VT_R4-unpack f&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr WP obj-h1234-reading Temp_In&lt;br /&gt;
attr WP obj-h1234-type VT_R4&lt;br /&gt;
attr WP obj-h1236-reading Temp_Out&lt;br /&gt;
attr WP obj-h1236-type VT_R4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This example defines a data type with the name VT_R4 which uses an unpack code of f&amp;gt;, length 2 and reversed register ordering. It then assigns this Type to the objects Temp_In and Temp_Out.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
Data objects that the module offers to external Modbus masters (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus slave, the attributes assign readings of Fhem devices to Modbus objects with their addresses and control how these objects are calculated from the reading values that exist in Fhem.&lt;br /&gt;
It is also possible to allow an external Modbus master to send write function codes and change the value of readings inside Fhem.&lt;br /&gt;
&lt;br /&gt;
Example for a Modbus slave configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
attr Data4PLC IODev MRS485&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h256-reading THSensTerrasse:temperature&lt;br /&gt;
attr Data4PLC obj-h256-unpack f&lt;br /&gt;
attr Data4PLC obj-h256-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h258-reading THSensTerrasse:humidity&lt;br /&gt;
attr Data4PLC obj-h258-unpack f&lt;br /&gt;
attr Data4PLC obj-h258-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h260-reading myDummy:limit&lt;br /&gt;
attr Data4PLC obj-h260-unpack n&lt;br /&gt;
attr Data4PLC obj-h260-len 1&lt;br /&gt;
attr Data4PLC obj-h260-allowWrite 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example Fhem allows an external Modbus master to read the temperature of a Fhem device named THSensTerrasse through holding register 256 and the humidity of that Fhem device through holding register 258. Both are encoded as floting point values that span two registers. &lt;br /&gt;
The master can also read but also write the reading named limit of the device myDummy.&lt;br /&gt;
&lt;br /&gt;
== Set-Commands ==&lt;br /&gt;
can be defined for holding registers and coils by using attributes.&lt;br /&gt;
&lt;br /&gt;
Every object for which an attribute like &amp;lt;code&amp;gt;obj-xy-set&amp;lt;/code&amp;gt; is set to 1 will create a valid set option.&lt;br /&gt;
&lt;br /&gt;
Additionally the attribute &amp;lt;code&amp;gt;enableControlSet&amp;lt;/code&amp;gt; enables the set options &amp;lt;code&amp;gt;interval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;scanModbusObjects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;scanModbusIds&amp;lt;/code&amp;gt; (for devices connected with RTU / ASCII over a serial line).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;interval &amp;amp;lt;Interval&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:modifies the interval that was set during define. &lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops the interval timer that is used to automatically poll objects through Modbus.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;&lt;br /&gt;
:starts the interval timer that is used to automatically poll objects through Modbus. &lt;br /&gt;
:If an interval is specified during the define command then the interval timer is started automatically. &lt;br /&gt;
:However if you stop it with the command &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; stop&amp;lt;/code&amp;gt; &lt;br /&gt;
:then you can start it again with &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; start&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt;&lt;br /&gt;
:causes a read of all objects that are set to be polled in the defined interval. The interval timer is not modified.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusObjects &amp;amp;lt;startObj&amp;amp;gt; - &amp;amp;lt;endObj&amp;amp;gt; &amp;amp;lt;reqLen&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans the device objects and automatically creates attributes for each reply it gets. &lt;br /&gt;
:This might be useful for exploring devices without proper documentation. &lt;br /&gt;
:The following example starts a scan and queries the holding registers with addresses between 100 and 120. &lt;br /&gt;
:&amp;lt;code&amp;gt;set MyModbusAttrDevice scanModbusObjects h100-120&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:For each reply it gets, the module creates a reading like&lt;br /&gt;
:&amp;lt;code&amp;gt;scan-h100 hex=0021, string=.!, s=8448, s&amp;gt;=33, S=8448, S&amp;gt;=33&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:the representation of the result as hex is 0021 and&lt;br /&gt;
:the ASCII representation is .!. s, s&amp;gt;, S and S&amp;gt; are different representations with their Perl pack-code.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusIds &amp;amp;lt;startId&amp;amp;gt; - &amp;amp;lt;endId&amp;amp;gt; &amp;amp;lt;knownObj&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans for Modbus Ids on an RS485 Bus. The following set command for example starts a scan:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Device scanModbusId 1-7 h770&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:since many Modbus devices don&#039;t reply at all if an object is requested that does not exist, &lt;br /&gt;
:scanModbusId needs the adress of an object that is known to exist.&lt;br /&gt;
:If a device with Id 5 replies to a read request for holding register 770, a reading like the following will be created:&lt;br /&gt;
:&amp;lt;code&amp;gt;scanId-5-Response-h770 hex=0064, string=.d, s=25600, s&amp;gt;=100, S=25600, S&amp;gt;=100&amp;lt;/code&amp;gt;&lt;br /&gt;
;&amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops any running scans.&lt;br /&gt;
;saveAsModule &amp;lt;name&amp;gt;&lt;br /&gt;
:experimental: saves the definitions of obj- and dev- attributes in a new fhem module file as /tmp/98_ModbusGen&amp;lt;name&amp;gt;.pm.&lt;br /&gt;
:if this file is copied into the fhem module subdirectory (e.g. /opt/fhem/FHEM) and fhem is restarted then instead of defining a device&lt;br /&gt;
:as ModbusAttr with all the attributes to define objects, you can just define a device of the new type ModbusGen&amp;lt;name&amp;gt; and all the &lt;br /&gt;
:objects will be there by default. However all definitions can still be changed / overriden with the attribues defined in ModbusAttr if needed.&lt;br /&gt;
&lt;br /&gt;
== Get-Commands ==&lt;br /&gt;
&lt;br /&gt;
Every reading can be manually requested by a Get. &lt;br /&gt;
Internally a Get command triggers the corresponding Modbus request to the device and the module then interprets the data and sets the right Fhem readings. To avoid huge option lists in FHEMWEB, the objects visible as Get in FHEMWEB can be defined by setting an attribute &amp;lt;code&amp;gt;obj-xy-showGet&amp;lt;/code&amp;gt; to 1.&lt;br /&gt;
&lt;br /&gt;
== All Attributes ==&lt;br /&gt;
&lt;br /&gt;
;readingFnAttributes&lt;br /&gt;
:the usual Fhem attributes for all devices&lt;br /&gt;
&lt;br /&gt;
;alignTime&lt;br /&gt;
:Aligns each periodic read request for the defined interval to this base time. &lt;br /&gt;
:This is typcally something like 00:00 (see the Fhem at command)&lt;br /&gt;
&lt;br /&gt;
;enableControlSet&lt;br /&gt;
:enables the built in set commands like interval, stop, start and reread (see above)        &lt;br /&gt;
&lt;br /&gt;
the following list of attributes can be applied to any data object by specifying the objects type and address in the variable part. &lt;br /&gt;
For many attributes you can also specify default values per object type (see dev- attributes later) or you can specify an object attribute without type and address (e.g. obj-len) which then applies as default for all objects:&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-reading &lt;br /&gt;
:define the name of a reading that corresponds to the Modbus data object of type c,d,i or h and a decimal address (e.g. obj-h225-reading).&lt;br /&gt;
	&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-name &lt;br /&gt;
:defines an optional internal name of this data object (this has no meaning for fhem and serves mainly documentation purposes.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-set &lt;br /&gt;
:if set to 1 then this data object can be changed (works only for holding registers and coils since discrete inputs and input registers can not be modified by definition.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-min &lt;br /&gt;
:defines a lower limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-max &lt;br /&gt;
:defines an upper limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-hint &lt;br /&gt;
:this is used for set options and tells fhemweb what selection to display for the set option (list or slider etc.)&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-expr &lt;br /&gt;
:defines a perl expression that converts the raw value read from the device.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-ignoreExpr&lt;br /&gt;
:defines a perl expression that returns 1 if a value should be ignored and the existing reading should not be modified&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-map &lt;br /&gt;
:defines a map to convert values read from the device to more convenient values when the raw value is read from the device or back when the value to write has to be converted from the user value to a raw value that can be written. Example: 0:mittig, 1:oberhalb, 2:unterhalb &lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-setexpr &lt;br /&gt;
:defines a perl expression that converts the user specified value in a set to a raw value that can be sent to the device. This is typically the inversion of -expr above.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-format &lt;br /&gt;
:defines a format string to format the value read e.g. %.1f&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-len &lt;br /&gt;
:defines the length of the data object in registers. It defaults to 1. Some devices store 32 bit floating point values in two registers. In this case you can set this attribute to two.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-unpack &lt;br /&gt;
:defines the unpack code to convert the raw data string read from the device to a reading. For an unsigned integer in big endian format this would be &amp;quot;n&amp;quot;, for a signed 16 bit integer in big endian format this would be &amp;quot;s&amp;gt;&amp;quot; and for a 32 bit big endian float value this would be &amp;quot;f&amp;gt;&amp;quot;. (see the perl documentation of the pack function).&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-revRegs&lt;br /&gt;
:this is only applicable to objects that span several input registers or holding registers.&lt;br /&gt;
:when they are read then the order of the registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string. &lt;br /&gt;
:The same happens before the object is written with a set command.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-bswapRegs&lt;br /&gt;
:this is applicable to objects that span several input or holding registers.&lt;br /&gt;
:After the registers have been read and before they are writtem, &lt;br /&gt;
:all 16-bit values are treated big-endian and are reversed to little-endian by swapping the two 8 bit bytes. &lt;br /&gt;
:This functionality is most likely used for reading (ASCII) strings from the device &lt;br /&gt;
:that are stored as big-endian 16-bit values.&lt;br /&gt;
:example: original reading is &amp;quot;324d3130203a57577361657320722020&amp;quot;. After applying bswapRegs, &lt;br /&gt;
:the value will be &amp;quot;4d3230313a2057576173736572202020&amp;quot; which will result in the ASCII string &lt;br /&gt;
:&amp;quot;M201: WWasser   &amp;quot;. &lt;br /&gt;
:Should be used with &amp;quot;(a*)&amp;quot; as -unpack value.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-decode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function decode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 instead of utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-encode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function encode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-showGet &lt;br /&gt;
:every reading can also be requested by a get command. However these get commands are not automatically offered in fhemweb. By specifying this attribute, the get will be visible in fhemweb.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-poll&lt;br /&gt;
:if set to 1 then this obeject is included in the cyclic update request as specified in the define command. If not set, then the object can manually be requested with a get command, but it is not automatically updated each interval. Note that this setting can also be specified as default for all objects with the dev- atributes described later.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-polldelay &lt;br /&gt;
:this attribute allows to poll objects at a lower rate than the interval specified in the define command. you can either specify a time in seconds or number prefixed by &amp;quot;x&amp;quot; which means a multiple of the interval of the define command. if you specify a normal numer then it is interpreted as minimal time between the last read and another automatic read. Please note that this does not create an individual interval timer. Instead the normal interval timer defined by the interval of the define command will check if this reading is due or not yet. So the effective interval will always be a multiple of the interval of the define.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*read &lt;br /&gt;
:specifies the function code to use for reading this type of object. The default is 3 for holding registers, 1 for coils, 2 for discrete inputs and 4 for input registers.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*write &lt;br /&gt;
:specifies the function code to use for writing this type of object. The default is 6 for holding registers and 5 for coils. Discrete inputs and input registers can not be written by definition.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*combine &lt;br /&gt;
:defines how many adjacent objects can be read in one request. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defLen &lt;br /&gt;
:defines the default length for this object type. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defFormat &lt;br /&gt;
:defines a default format string to use for this object type in a sprintf function on the values read from the device.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defExpr&lt;br /&gt;
:defines a default Perl expression to use for this object type to convert raw values read.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defIgnoreExpr&lt;br /&gt;
:defines a default Perl expression to decide when values should be ignored.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defUnpack &lt;br /&gt;
:defines the default unpack code for this object type. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defRevRegs&lt;br /&gt;
:defines that the order of registers for objects that span several registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defBswapRegs&lt;br /&gt;
:per device default for swapping the bytes in Registers (see obj-bswapRegs above)&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defDecode&lt;br /&gt;
:defines a default for decoding the strings read from a different character set e.g. cp850&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defEncode&lt;br /&gt;
:defines a default for encoding the strings read (or after decoding from a different character set) e.g. utf8&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defPoll &lt;br /&gt;
:if set to 1 then all objects of this type will be included in the cyclic update by default. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defShowGet &lt;br /&gt;
:if set to 1 then all objects of this type will have a visible get by default. &lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*allowShortResponses &lt;br /&gt;
:if set to 1 the module will accept a response with valid checksum but data lengh &amp;lt; lengh in header&lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;nextOpenDelay &lt;br /&gt;
:delay for Modbus-TCP connections. &lt;br /&gt;
:This defines how long the module should wait after a failed TCP connection attempt before the next reconnection attempt. &lt;br /&gt;
:This defaults to 60 seconds.&lt;br /&gt;
&lt;br /&gt;
;openTimeout     &lt;br /&gt;
:timeout to be used when opening a Modbus TCP connection (defaults to 3)&lt;br /&gt;
&lt;br /&gt;
;timeoutLogLevel &lt;br /&gt;
:log level that is used when logging a timeout. Defaults to 3. &lt;br /&gt;
&lt;br /&gt;
;silentReconnect &lt;br /&gt;
:if set to 1, then it will set the loglevel for &amp;quot;disconnected&amp;quot; and &amp;quot;reappeared&amp;quot; messages to 4 instead of 3&lt;br /&gt;
&lt;br /&gt;
;maxTimeoutsToReconnect &lt;br /&gt;
:this attribute is only valid for TCP connected devices. &lt;br /&gt;
:In such cases a disconnected device might stay undetected and lead to timeouts until the TCP connection is reopened. &lt;br /&gt;
:This attribute specifies after how many timeouts an automatic reconnect is tried.&lt;br /&gt;
&lt;br /&gt;
;dev-h-brokenFC3&lt;br /&gt;
:workaround for some broken Modbus function code 3 implementations&lt;br /&gt;
&lt;br /&gt;
;disable&lt;br /&gt;
:stop communication with the device while this attribute is set to 1. For Modbus over TCP this also closes the TCP connection.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.Modbus.org Modbus.org]&lt;br /&gt;
* About Modbus ([http://en.wikipedia.org/wiki/Modbus English] / [http://de.wikipedia.org/wiki/Modbus German])&lt;br /&gt;
* Perl [http://perldoc.perl.org/functions/pack.html unpack codes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39278</id>
		<title>Weiteres Beispiel - SMA Wechselrichter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39278"/>
		<updated>2024-04-22T20:01:10Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Based on the [https://forum.fhem.de/index.php?PHPSESSID=0r7498gqu6nfenvipunrp94feq&amp;amp;topic=75638.1215 discussion in the forum], here is another example that shows how the language can be changed in [https://files.sma.de/downloads/EDMx-Modbus-TI-de-16.pdf SMA inverters]. To do this, the value of the double holding register 40013 is read or set. 777 corresponds to DE, 778 to EN.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
   define SI ModbusAttr 3 10 192.168.188.38:502 TCP&lt;br /&gt;
   attr SI closeAfterResponse 0&lt;br /&gt;
   attr SI dev-h-defLen 2&lt;br /&gt;
   attr SI dev-h-defPoll 0&lt;br /&gt;
   attr SI dev-h-defRevRegs 0&lt;br /&gt;
   attr SI dev-h-defUnpack N&lt;br /&gt;
   attr SI dev-type-ENUM_JN-hint EN,DE&lt;br /&gt;
   attr SI dev-type-ENUM_JN-map 777:DE,778:EN&lt;br /&gt;
   attr SI dev-type-ENUM_JN-revRegs 0&lt;br /&gt;
   attr SI enableControlSet 1&lt;br /&gt;
   attr SI obj-h40013-reading Sprache&lt;br /&gt;
   attr SI obj-h40013-set 1&lt;br /&gt;
   attr SI obj-h40013-showGet 1&lt;br /&gt;
   attr SI room SYSTEM-&amp;gt;modbus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39277</id>
		<title>Weiteres Beispiel - SMA Wechselrichter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39277"/>
		<updated>2024-04-22T20:00:38Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Translation to EN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier auf Basis [https://forum.fhem.de/index.php?PHPSESSID=0r7498gqu6nfenvipunrp94feq&amp;amp;topic=75638.1215 der Diskussion] im Forum ein weiteres Beispiel, das exemplarisch zeigt, wie bei [https://files.sma.de/downloads/EDMx-Modbus-TI-de-16.pdf SMA-Wechselrichtern] die Sprache gewechselt werden kann. Dazu wird der Wert des Doppel-Halteregisters 40013 ausgelesen bzw. gesetzt. 777 entspricht dabei DE, 778 EN. Based on the [https://forum.fhem.de/index.php?PHPSESSID=0r7498gqu6nfenvipunrp94feq&amp;amp;topic=75638.1215 discussion in the forum], here is another example that shows how the language can be changed in [https://files.sma.de/downloads/EDMx-Modbus-TI-de-16.pdf SMA inverters]. To do this, the value of the double holding register 40013 is read or set. 777 corresponds to DE, 778 to EN.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
   define SI ModbusAttr 3 10 192.168.188.38:502 TCP&lt;br /&gt;
   attr SI closeAfterResponse 0&lt;br /&gt;
   attr SI dev-h-defLen 2&lt;br /&gt;
   attr SI dev-h-defPoll 0&lt;br /&gt;
   attr SI dev-h-defRevRegs 0&lt;br /&gt;
   attr SI dev-h-defUnpack N&lt;br /&gt;
   attr SI dev-type-ENUM_JN-hint EN,DE&lt;br /&gt;
   attr SI dev-type-ENUM_JN-map 777:DE,778:EN&lt;br /&gt;
   attr SI dev-type-ENUM_JN-revRegs 0&lt;br /&gt;
   attr SI enableControlSet 1&lt;br /&gt;
   attr SI obj-h40013-reading Sprache&lt;br /&gt;
   attr SI obj-h40013-set 1&lt;br /&gt;
   attr SI obj-h40013-showGet 1&lt;br /&gt;
   attr SI room SYSTEM-&amp;gt;modbus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39276</id>
		<title>ModbusAttr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39276"/>
		<updated>2024-04-22T19:54:24Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: SMA-Beispiel ergänzt als Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Extract information from devices with a Modbus interface or send information to such devices &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ModbusAttr&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModFTopic=25315&lt;br /&gt;
|ModTechName=98_ModbusAttr.pm&lt;br /&gt;
|ModOwner=StefanStrobel ({{Link2FU|3960|Forum}} / [[Benutzer:StefanStrobel|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ModbusAttr]] uses the low level Modbus module 98_[[Modbus]].pm to provide a generic Modbus module (as master, slave, relay or passive listener) &lt;br /&gt;
that can be configured by attributes similar to the way HTTPMOD works for devices with a web interface.&lt;br /&gt;
&lt;br /&gt;
ModbusAttr can be used as a Modbus master that queries data from other devices over a serial RS232 / RS485 or TCP connection, &lt;br /&gt;
it can be used as a Modbus slave that can make readings of Fhem devices available via Modbus to external Modbus masters,&lt;br /&gt;
it can act as a Modbus relay that receives requests over one connection and forwards them over another connection (e.g. from Modbus TCP to serial Modbus RTU)&lt;br /&gt;
or it can passively listen to other devices that communicate over a serial RS485 connection and extract readings from the objects it sees.&lt;br /&gt;
The supported protocols are Modbus RTU, Modbus ASCII or Modbus TCP.&lt;br /&gt;
&lt;br /&gt;
There are several attributes that modify the way data objects are converted before they are stored in readings or sent to a device. Data can be modified by a perl expression defined in an atribute, formatted with a format string defined in another attribute or mapped to a table defined in an attribute.&lt;br /&gt;
&lt;br /&gt;
Readings can directly correspond to one data object or they can span several objects. A float value for example might be stored in two input or holding registers in the Modbus device. By specifying attributes that define the length of a reading in objects and by specifying the unpack code to get from a raw string to perl variables, all these cases can be described by attributes and no perl coding is necessary.&lt;br /&gt;
&lt;br /&gt;
== Availability == &lt;br /&gt;
The module has been checked in.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
This module uses the [[Modbus|Modbus base module 98_Modbus.pm]] which uses the DevIO module&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus master == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;iodevice&amp;gt; Modbus /dev/device@baudrate,bits,parity,stop&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;RTU|ASCII&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the first case the module connects to the external Modbus device with Modbus Id &amp;lt;Id&amp;gt; through a serial modbus device (RS232 or RS485).&lt;br /&gt;
&lt;br /&gt;
In the second case it connects directly through Modbus TCP or Modbus RTU or ASCII over TCP.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;Interval&amp;gt; is not 0 then the module actively requests data from that device every &amp;lt;Interval&amp;gt; seconds.&lt;br /&gt;
&lt;br /&gt;
The objects that the module should request and the readings it should create from these objects have to be defined with attributes (see below). &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
Interval can be 0 in which case the Module only requests data when it is triggered with a Fhem get-Command.&lt;br /&gt;
With this mode a Fhem installation can for example query sensor data from a heating system, energy meter or solar power installation if these systems offer a Modbus interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 1 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 20 0 ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine with Modbus ASCII. &lt;br /&gt;
Use Modbus Id 20 and don&#039;t query the device in a defined interval. Instead individual SET / GET options have to be used for communication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 5 60 192.168.1.122:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus TCP to a device with IP-Address 192.168.1.122 and the reserved port for Modbus TCP 502&lt;br /&gt;
Note that for Modbus over a TCP connection you don&#039;t need a basic Modbus device for the interface like ModbusLine above. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 3 60 192.168.1.122:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus RTU over TCP and use the port number 8000&lt;br /&gt;
    &lt;br /&gt;
== Define as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will respond to their requests if the requests contain the given Modbus &amp;lt;Id&amp;gt;&lt;br /&gt;
To provide data with Modbus to external Modbus masters a mapping needs to be defined using attributes. &lt;br /&gt;
These attributes will define a mapping from Readings inside Fhem to so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; and their Modbus object address together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example supply data to a PLC that actively reads data from Fhem or writes data to Fhem readings.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define Data4PLC as a Modbus slave that communicates through the Modbus serial interface device named MRS485 to listen for Modbus requests with Id 1. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 20 slave ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen for Modbus requests with Id 20 with Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 5 slave 192.168.1.2:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to start listening to TCP port 502 on the local address 192.168.1.2. Modbus TCP will be used as protocol and Requests with Modbus Id 5 will be answered.&lt;br /&gt;
&lt;br /&gt;
Please be aware that opening a port number smaller than 1024 needs root permissions on Unix devices. So it is probably better to use a non standard port number above 1024 instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 3 slave 192.168.1.2:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen to the local port 8000 and talk Modbus RTU over TCP&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus passive listener == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; passive &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module listens on a serial (RS485) connection for modbus communication with the given Modbus &amp;lt;Id&amp;gt; and extracts readings. It does not send requests by itself but waits for another master to communicate with a slave. So only objects that the other master requests can be seen by Fhem in this configuration. &lt;br /&gt;
The objects that the module recognizes and the readings that it should create from these objects have to be defined with attributes (see below) in the same way as for a Modbus master. &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example Listen to the communication between an energy counter as slave and a solar control system as master if they use Modbus RTU over RS485. Since only one Master is allowed when using Modbus over serial lines, Fhem can not be master itself. As a passive listener it can however see when the master queries e.g. the current power consumption and then also see the reply from the energy meter and store the value in a Fhem reading.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 1 passive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passively listen for Modbus requests and replies with Id 1 over a serial interface managed by an already defined basic modbus device named MB-485. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 20 passive ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passivel listen for Modbus requests / replies with Id 20 and Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
== Define as Modbus relay == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for a relay from a serial line to a defined master or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt; to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For a relay that listens to modbus requests from a network connection.&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will forward requests if they match the given Modbus &amp;lt;Id&amp;gt; to an already defined Modbus Master device inside Fhem which will send them to its defined slave, take the reply and then pass it back to the original Master.&lt;br /&gt;
With this mode a Fhem installation can for example be used in front of a device that only speaks Modbus RTU over RS485 to make it available via Modbus TCP over the local network. &lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define Heating ModbusAttr 22 0&lt;br /&gt;
define Relay ModbusAttr 33 relay 192.168.1.2:1502 TCP to Heating&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-485 as a base device for the RS-485 communication with a heating system, &lt;br /&gt;
defines Heating as a Modbus Master to communicate with the Heating and its Modbus ID 22, &lt;br /&gt;
and then defines the relay which listens to the local IP address 192.168.1.2, TCP port 1502, Modbus Id 33 and protocol Modbus-TCP.&lt;br /&gt;
Requests coming in through Modbus TCP and port 1502 are then translated to Modbus RTU and forwarded via RS-485 to the heating system with Modbus Id 22.&lt;br /&gt;
&lt;br /&gt;
Please note that the IP address specified in the relay definition is a local IP address of the relay itself and that the port number is 1502, not 502 because Fhem running on Linux can not easily open listening port numbers below 1024 unless it is running as root.&lt;br /&gt;
&lt;br /&gt;
Other (unlikely) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-232 Modbus /dev/ttyUSB2@19200&lt;br /&gt;
define Solar ModbusAttr 7 0 192.168.1.122:502 RTU&lt;br /&gt;
define PLC2NetRelay ModbusAttr 1 ASCII relay to Solar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-232 as a base device for the RS-232 communication with a PLC as Modbus master, &lt;br /&gt;
defines Solar as a Modbus Master to communicate with Modbus TCP to a Solar power system at IP Adrress 192.168.1.122 and its Modbus ID 7, &lt;br /&gt;
and then defines the PLC2NetRelay as a relay which listens to Modbus-ASCII requests over the serial RS-232 link from a PLC to Modbus ID 1.&lt;br /&gt;
Requests to Modbus Id 1 coming in through the serial link are then translated to Modbus TCP and forwarded over the network to the solar power system with Modbus Id 7.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as master or passive listener == &lt;br /&gt;
&lt;br /&gt;
Data objects (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus master or passive listener, the attributes assign data objects of external devices (heating systems, power meters, PLCs or other) with their register addresses to readings inside fhem and control how these readings are calculated from the raw values and how they are formatted.&lt;br /&gt;
Please be aware that Modbus does not define common data types so the representation of a value can be very different from device to device. One device might make a temperature value avaliable as a floating point value that is stored in two holding resgisters, another device might store the temperature multiplied with 10 as an signed integer in one register. Even the order of bytes can vary.&lt;br /&gt;
Therefore it is typically necessary to specify the data representation as a Perl unpack code.&lt;br /&gt;
A Modbus master can also write values to Objects in the device and attributes define how this is done.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz | RNTyp=y | RNText=To set the following attributes, modify the examples and then add them to the FHEM command line at the top of the web interface. The usual procedure in the web interface is apparently only supported afterwards.}} &lt;br /&gt;
&lt;br /&gt;
Example for a Modbus master or passive configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define PWP ModbusAttr 5 30&lt;br /&gt;
attr PWP obj-h256-reading Temp_Wasser_ein&lt;br /&gt;
attr PWP obj-h256-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
attr PWP obj-h258-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h262-reading Temp_Luft&lt;br /&gt;
attr PWP obj-h262-expr $val / 10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h770-reading Temp_Soll&lt;br /&gt;
attr PWP obj-h770-expr $val / 10&lt;br /&gt;
attr PWP obj-h770-set 1&lt;br /&gt;
attr PWP obj-h770-setexpr $val * 10&lt;br /&gt;
attr PWP obj-h770-max 32&lt;br /&gt;
attr PWP obj-h770-min 10&lt;br /&gt;
attr PWP obj-h770-hint 8,10,20,25,28,29,30,30.5,31,31.5,32&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-h-combine 5&lt;br /&gt;
attr PWP dev-h-defPoll 1&lt;br /&gt;
attr PWP dev-h-defUnpack n&lt;br /&gt;
&lt;br /&gt;
attr PWP room Pool-WP&lt;br /&gt;
attr PWP stateFormat {sprintf(&amp;quot;%.1f Grad&amp;quot;, ReadingsVal($name,&amp;quot;Temp_Wasser_Ein&amp;quot;,0))}&lt;br /&gt;
attr PWP webCmd Temp_Soll&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Weiteres Beispiel - SMA Wechselrichter]] &lt;br /&gt;
&lt;br /&gt;
Attributes to define data objects start with obj- followed by a code that identifies the type and address&lt;br /&gt;
of the data object. &lt;br /&gt;
&lt;br /&gt;
Modbus devices offer the following types of data objects: &lt;br /&gt;
&lt;br /&gt;
;holding registers (16 bit objects that can be read and written)&lt;br /&gt;
;input registers (16 bit objects that can only be read)&lt;br /&gt;
;coils (single bit objects that can be read and written)&lt;br /&gt;
;discrete inputs (single bit objects that can only be read)&lt;br /&gt;
&lt;br /&gt;
The module uses the first character of these data object types to define attributes. &lt;br /&gt;
Thus h770 refers to a holding register with the decimal address 770 and c120 refers to a coil with address 120. &lt;br /&gt;
The address has to be specified as pure decimal number. The address counting starts at address 0&lt;br /&gt;
&lt;br /&gt;
Please note that the documentation for devices sometimes uses different numbering. They might start counting with one instead of zero so if a voltage value is stored in input register number 107 according to the documentation of the device, it might technically mean register number 106 (in the Modbus protocol specification addresses start with 0).&lt;br /&gt;
Also some vendors use hexadecimal descriptions of their register addresses. So input register 107 might be noted as hex and means 263 or even 262 as decimal address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
defines a reading with the name Temp_Wasser_Aus that is read from the Modbus holding register at address 258.&lt;br /&gt;
With the attribute ending on &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; you can define a perl expression to do some conversion or calculation on the raw value read from the device. &lt;br /&gt;
In the above example the raw value has to be devided by 10 to get the real value. If the raw value is also the final value then no &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; attribute is necessary. &lt;br /&gt;
&lt;br /&gt;
An object attribute ending on &amp;lt;code&amp;gt;-set&amp;lt;/code&amp;gt; creates a fhem set option. &lt;br /&gt;
In the above example the reading Temp_Soll can be changed to 12 degrees by the user with the fhem command &amp;lt;code&amp;gt;set PWP Temp_Soll 12&amp;lt;/code&amp;gt;&lt;br /&gt;
The object attributes ending on &amp;lt;code&amp;gt;-min&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-max&amp;lt;/code&amp;gt; define min and max values for input validation &lt;br /&gt;
and the attribute ending on &amp;lt;code&amp;gt;-hint&amp;lt;/code&amp;gt; will tell fhem to create a selection list so the user can graphically select the defined values.&lt;br /&gt;
&lt;br /&gt;
To define general properties of the device you can specify attributes starting with &amp;lt;code&amp;gt;dev-&amp;lt;/code&amp;gt;. &lt;br /&gt;
E.g. with &amp;lt;code&amp;gt;dev-timing-timeout&amp;lt;/code&amp;gt; you can specify the timeout when waiting for a response from the device. &lt;br /&gt;
With &amp;lt;code&amp;gt;dev-h-&amp;lt;/code&amp;gt; you can specify several default values or general settings for all holding registers &lt;br /&gt;
like the function code to be used when reading or writing holding registers. &lt;br /&gt;
These attributes are optional and the module will use defaults that work in most cases. &lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-combine 5&amp;lt;/code&amp;gt; for example allows the module to combine read requests to objects having an address that differs 5 or less into one read request. &lt;br /&gt;
Without setting this attribute the module will start individual read requests for each object. &lt;br /&gt;
Typically the documentation for the modbus interface of a given device states the maximum number of objects that can be read in one function code 3 request.&lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-defUnpack n&amp;lt;/code&amp;gt; means that the values in this example that the values are stored as unsigned short (16-bit) in &amp;quot;network&amp;quot; (big-endian) order. This is only one possibility of many. An integer value might be signed instead of unsigned or it might use different byte ordering (e.g. unpack codes v or s). &lt;br /&gt;
&lt;br /&gt;
== Handling Data Types == &lt;br /&gt;
&lt;br /&gt;
The Modbus protocol does not define data types. If the documentation of a device states that for example the current temperature is stored in holding register 102 this leaves room for many interpretations. Not only can the address 102 mean different things (actually decimal 102 or rather 101 if the vendor starts counting at 1 instead of 0 or even 257 or 258 if the vendor used hexadecimal addresses in his documentation ) also the data representation can be many different things. As in every programming language, there are many ways to represent numbers. They can be stored signed or unsigned, they can be integers or floating point numbers, the byte-order can be &amp;quot;big endian&amp;quot; or &amp;quot;small endian&amp;quot;, the value can be stored in one holding register or in two holding registers (floating point numbers typically take four bytes which means two holding registers).&lt;br /&gt;
The Modbus module allows flexible configuration of data representations be assigning a Perl unpack-code, a length, a Perl Expression, and the register ordering. The following example illustrates how this can be done:        &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h338-reading Pressure&lt;br /&gt;
attr PWP obj-h338-len 2&lt;br /&gt;
attr PWP obj-h338-unpack f&amp;gt;&lt;br /&gt;
attr PWP obj-h338-revRegs 1&lt;br /&gt;
attr PWP obj-h338-format %.2f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In This example a floating point value for the reading &amp;quot;Pressure&amp;quot; is read from the holding registers starting at address 338. &lt;br /&gt;
The value occupies 32 Bits and is therefore stored in two registers. The Perl pack code to use is f&amp;gt; which means a native single precision float in big endian format (byte order). With revRegs the module is instructed to reverse the order of the registers directly after reading. The format specification then defines how the value is formatted into a reading - in this case with two digits after the comma. See http://perldoc.perl.org/functions/pack.html for Perl pack / unpack codes and http://perldoc.perl.org/functions/sprintf.html for format specifications.&lt;br /&gt;
&lt;br /&gt;
If you need to read / write many objects for a device, defining all these parameters each time is not elegant. The Modbus module therefore offers twi ways to simplify this task: &lt;br /&gt;
You can define defaults for every type of object or you can define your own data types once and then refer to them.&lt;br /&gt;
This exampe shows how defaults can be specified for holding registers and input registers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP dev-h-defUnpack f&amp;gt;&lt;br /&gt;
attr PWP dev-h-defLen 2&lt;br /&gt;
attr PWP dev-h-defRevRegs 1&lt;br /&gt;
attr PWP dev-h-defFormat %.2f&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-i-defUnpack n&lt;br /&gt;
attr PWP dev-i-defLen 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next example shows how you can define your own data types and then apply them to objects:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WP dev-type-VT_R4-format %.1f&lt;br /&gt;
attr WP dev-type-VT_R4-len 2&lt;br /&gt;
attr WP dev-type-VT_R4-revRegs 1&lt;br /&gt;
attr WP dev-type-VT_R4-unpack f&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr WP obj-h1234-reading Temp_In&lt;br /&gt;
attr WP obj-h1234-type VT_R4&lt;br /&gt;
attr WP obj-h1236-reading Temp_Out&lt;br /&gt;
attr WP obj-h1236-type VT_R4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This example defines a data type with the name VT_R4 which uses an unpack code of f&amp;gt;, length 2 and reversed register ordering. It then assigns this Type to the objects Temp_In and Temp_Out.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
Data objects that the module offers to external Modbus masters (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus slave, the attributes assign readings of Fhem devices to Modbus objects with their addresses and control how these objects are calculated from the reading values that exist in Fhem.&lt;br /&gt;
It is also possible to allow an external Modbus master to send write function codes and change the value of readings inside Fhem.&lt;br /&gt;
&lt;br /&gt;
Example for a Modbus slave configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
attr Data4PLC IODev MRS485&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h256-reading THSensTerrasse:temperature&lt;br /&gt;
attr Data4PLC obj-h256-unpack f&lt;br /&gt;
attr Data4PLC obj-h256-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h258-reading THSensTerrasse:humidity&lt;br /&gt;
attr Data4PLC obj-h258-unpack f&lt;br /&gt;
attr Data4PLC obj-h258-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h260-reading myDummy:limit&lt;br /&gt;
attr Data4PLC obj-h260-unpack n&lt;br /&gt;
attr Data4PLC obj-h260-len 1&lt;br /&gt;
attr Data4PLC obj-h260-allowWrite 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example Fhem allows an external Modbus master to read the temperature of a Fhem device named THSensTerrasse through holding register 256 and the humidity of that Fhem device through holding register 258. Both are encoded as floting point values that span two registers. &lt;br /&gt;
The master can also read but also write the reading named limit of the device myDummy.&lt;br /&gt;
&lt;br /&gt;
== Set-Commands ==&lt;br /&gt;
can be defined for holding registers and coils by using attributes.&lt;br /&gt;
&lt;br /&gt;
Every object for which an attribute like &amp;lt;code&amp;gt;obj-xy-set&amp;lt;/code&amp;gt; is set to 1 will create a valid set option.&lt;br /&gt;
&lt;br /&gt;
Additionally the attribute &amp;lt;code&amp;gt;enableControlSet&amp;lt;/code&amp;gt; enables the set options &amp;lt;code&amp;gt;interval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;scanModbusObjects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;scanModbusIds&amp;lt;/code&amp;gt; (for devices connected with RTU / ASCII over a serial line).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;interval &amp;amp;lt;Interval&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:modifies the interval that was set during define. &lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops the interval timer that is used to automatically poll objects through Modbus.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;&lt;br /&gt;
:starts the interval timer that is used to automatically poll objects through Modbus. &lt;br /&gt;
:If an interval is specified during the define command then the interval timer is started automatically. &lt;br /&gt;
:However if you stop it with the command &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; stop&amp;lt;/code&amp;gt; &lt;br /&gt;
:then you can start it again with &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; start&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt;&lt;br /&gt;
:causes a read of all objects that are set to be polled in the defined interval. The interval timer is not modified.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusObjects &amp;amp;lt;startObj&amp;amp;gt; - &amp;amp;lt;endObj&amp;amp;gt; &amp;amp;lt;reqLen&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans the device objects and automatically creates attributes for each reply it gets. &lt;br /&gt;
:This might be useful for exploring devices without proper documentation. &lt;br /&gt;
:The following example starts a scan and queries the holding registers with addresses between 100 and 120. &lt;br /&gt;
:&amp;lt;code&amp;gt;set MyModbusAttrDevice scanModbusObjects h100-120&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:For each reply it gets, the module creates a reading like&lt;br /&gt;
:&amp;lt;code&amp;gt;scan-h100 hex=0021, string=.!, s=8448, s&amp;gt;=33, S=8448, S&amp;gt;=33&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:the representation of the result as hex is 0021 and&lt;br /&gt;
:the ASCII representation is .!. s, s&amp;gt;, S and S&amp;gt; are different representations with their Perl pack-code.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusIds &amp;amp;lt;startId&amp;amp;gt; - &amp;amp;lt;endId&amp;amp;gt; &amp;amp;lt;knownObj&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans for Modbus Ids on an RS485 Bus. The following set command for example starts a scan:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Device scanModbusId 1-7 h770&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:since many Modbus devices don&#039;t reply at all if an object is requested that does not exist, &lt;br /&gt;
:scanModbusId needs the adress of an object that is known to exist.&lt;br /&gt;
:If a device with Id 5 replies to a read request for holding register 770, a reading like the following will be created:&lt;br /&gt;
:&amp;lt;code&amp;gt;scanId-5-Response-h770 hex=0064, string=.d, s=25600, s&amp;gt;=100, S=25600, S&amp;gt;=100&amp;lt;/code&amp;gt;&lt;br /&gt;
;&amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops any running scans.&lt;br /&gt;
;saveAsModule &amp;lt;name&amp;gt;&lt;br /&gt;
:experimental: saves the definitions of obj- and dev- attributes in a new fhem module file as /tmp/98_ModbusGen&amp;lt;name&amp;gt;.pm.&lt;br /&gt;
:if this file is copied into the fhem module subdirectory (e.g. /opt/fhem/FHEM) and fhem is restarted then instead of defining a device&lt;br /&gt;
:as ModbusAttr with all the attributes to define objects, you can just define a device of the new type ModbusGen&amp;lt;name&amp;gt; and all the &lt;br /&gt;
:objects will be there by default. However all definitions can still be changed / overriden with the attribues defined in ModbusAttr if needed.&lt;br /&gt;
&lt;br /&gt;
== Get-Commands ==&lt;br /&gt;
&lt;br /&gt;
Every reading can be manually requested by a Get. &lt;br /&gt;
Internally a Get command triggers the corresponding Modbus request to the device and the module then interprets the data and sets the right Fhem readings. To avoid huge option lists in FHEMWEB, the objects visible as Get in FHEMWEB can be defined by setting an attribute &amp;lt;code&amp;gt;obj-xy-showGet&amp;lt;/code&amp;gt; to 1.&lt;br /&gt;
&lt;br /&gt;
== All Attributes ==&lt;br /&gt;
&lt;br /&gt;
;readingFnAttributes&lt;br /&gt;
:the usual Fhem attributes for all devices&lt;br /&gt;
&lt;br /&gt;
;alignTime&lt;br /&gt;
:Aligns each periodic read request for the defined interval to this base time. &lt;br /&gt;
:This is typcally something like 00:00 (see the Fhem at command)&lt;br /&gt;
&lt;br /&gt;
;enableControlSet&lt;br /&gt;
:enables the built in set commands like interval, stop, start and reread (see above)        &lt;br /&gt;
&lt;br /&gt;
the following list of attributes can be applied to any data object by specifying the objects type and address in the variable part. &lt;br /&gt;
For many attributes you can also specify default values per object type (see dev- attributes later) or you can specify an object attribute without type and address (e.g. obj-len) which then applies as default for all objects:&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-reading &lt;br /&gt;
:define the name of a reading that corresponds to the Modbus data object of type c,d,i or h and a decimal address (e.g. obj-h225-reading).&lt;br /&gt;
	&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-name &lt;br /&gt;
:defines an optional internal name of this data object (this has no meaning for fhem and serves mainly documentation purposes.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-set &lt;br /&gt;
:if set to 1 then this data object can be changed (works only for holding registers and coils since discrete inputs and input registers can not be modified by definition.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-min &lt;br /&gt;
:defines a lower limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-max &lt;br /&gt;
:defines an upper limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-hint &lt;br /&gt;
:this is used for set options and tells fhemweb what selection to display for the set option (list or slider etc.)&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-expr &lt;br /&gt;
:defines a perl expression that converts the raw value read from the device.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-ignoreExpr&lt;br /&gt;
:defines a perl expression that returns 1 if a value should be ignored and the existing reading should not be modified&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-map &lt;br /&gt;
:defines a map to convert values read from the device to more convenient values when the raw value is read from the device or back when the value to write has to be converted from the user value to a raw value that can be written. Example: 0:mittig, 1:oberhalb, 2:unterhalb &lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-setexpr &lt;br /&gt;
:defines a perl expression that converts the user specified value in a set to a raw value that can be sent to the device. This is typically the inversion of -expr above.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-format &lt;br /&gt;
:defines a format string to format the value read e.g. %.1f&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-len &lt;br /&gt;
:defines the length of the data object in registers. It defaults to 1. Some devices store 32 bit floating point values in two registers. In this case you can set this attribute to two.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-unpack &lt;br /&gt;
:defines the unpack code to convert the raw data string read from the device to a reading. For an unsigned integer in big endian format this would be &amp;quot;n&amp;quot;, for a signed 16 bit integer in big endian format this would be &amp;quot;s&amp;gt;&amp;quot; and for a 32 bit big endian float value this would be &amp;quot;f&amp;gt;&amp;quot;. (see the perl documentation of the pack function).&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-revRegs&lt;br /&gt;
:this is only applicable to objects that span several input registers or holding registers.&lt;br /&gt;
:when they are read then the order of the registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string. &lt;br /&gt;
:The same happens before the object is written with a set command.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-bswapRegs&lt;br /&gt;
:this is applicable to objects that span several input or holding registers.&lt;br /&gt;
:After the registers have been read and before they are writtem, &lt;br /&gt;
:all 16-bit values are treated big-endian and are reversed to little-endian by swapping the two 8 bit bytes. &lt;br /&gt;
:This functionality is most likely used for reading (ASCII) strings from the device &lt;br /&gt;
:that are stored as big-endian 16-bit values.&lt;br /&gt;
:example: original reading is &amp;quot;324d3130203a57577361657320722020&amp;quot;. After applying bswapRegs, &lt;br /&gt;
:the value will be &amp;quot;4d3230313a2057576173736572202020&amp;quot; which will result in the ASCII string &lt;br /&gt;
:&amp;quot;M201: WWasser   &amp;quot;. &lt;br /&gt;
:Should be used with &amp;quot;(a*)&amp;quot; as -unpack value.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-decode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function decode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 instead of utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-encode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function encode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-showGet &lt;br /&gt;
:every reading can also be requested by a get command. However these get commands are not automatically offered in fhemweb. By specifying this attribute, the get will be visible in fhemweb.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-poll&lt;br /&gt;
:if set to 1 then this obeject is included in the cyclic update request as specified in the define command. If not set, then the object can manually be requested with a get command, but it is not automatically updated each interval. Note that this setting can also be specified as default for all objects with the dev- atributes described later.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-polldelay &lt;br /&gt;
:this attribute allows to poll objects at a lower rate than the interval specified in the define command. you can either specify a time in seconds or number prefixed by &amp;quot;x&amp;quot; which means a multiple of the interval of the define command. if you specify a normal numer then it is interpreted as minimal time between the last read and another automatic read. Please note that this does not create an individual interval timer. Instead the normal interval timer defined by the interval of the define command will check if this reading is due or not yet. So the effective interval will always be a multiple of the interval of the define.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*read &lt;br /&gt;
:specifies the function code to use for reading this type of object. The default is 3 for holding registers, 1 for coils, 2 for discrete inputs and 4 for input registers.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*write &lt;br /&gt;
:specifies the function code to use for writing this type of object. The default is 6 for holding registers and 5 for coils. Discrete inputs and input registers can not be written by definition.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*combine &lt;br /&gt;
:defines how many adjacent objects can be read in one request. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defLen &lt;br /&gt;
:defines the default length for this object type. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defFormat &lt;br /&gt;
:defines a default format string to use for this object type in a sprintf function on the values read from the device.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defExpr&lt;br /&gt;
:defines a default Perl expression to use for this object type to convert raw values read.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defIgnoreExpr&lt;br /&gt;
:defines a default Perl expression to decide when values should be ignored.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defUnpack &lt;br /&gt;
:defines the default unpack code for this object type. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defRevRegs&lt;br /&gt;
:defines that the order of registers for objects that span several registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defBswapRegs&lt;br /&gt;
:per device default for swapping the bytes in Registers (see obj-bswapRegs above)&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defDecode&lt;br /&gt;
:defines a default for decoding the strings read from a different character set e.g. cp850&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defEncode&lt;br /&gt;
:defines a default for encoding the strings read (or after decoding from a different character set) e.g. utf8&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defPoll &lt;br /&gt;
:if set to 1 then all objects of this type will be included in the cyclic update by default. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defShowGet &lt;br /&gt;
:if set to 1 then all objects of this type will have a visible get by default. &lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*allowShortResponses &lt;br /&gt;
:if set to 1 the module will accept a response with valid checksum but data lengh &amp;lt; lengh in header&lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;nextOpenDelay &lt;br /&gt;
:delay for Modbus-TCP connections. &lt;br /&gt;
:This defines how long the module should wait after a failed TCP connection attempt before the next reconnection attempt. &lt;br /&gt;
:This defaults to 60 seconds.&lt;br /&gt;
&lt;br /&gt;
;openTimeout     &lt;br /&gt;
:timeout to be used when opening a Modbus TCP connection (defaults to 3)&lt;br /&gt;
&lt;br /&gt;
;timeoutLogLevel &lt;br /&gt;
:log level that is used when logging a timeout. Defaults to 3. &lt;br /&gt;
&lt;br /&gt;
;silentReconnect &lt;br /&gt;
:if set to 1, then it will set the loglevel for &amp;quot;disconnected&amp;quot; and &amp;quot;reappeared&amp;quot; messages to 4 instead of 3&lt;br /&gt;
&lt;br /&gt;
;maxTimeoutsToReconnect &lt;br /&gt;
:this attribute is only valid for TCP connected devices. &lt;br /&gt;
:In such cases a disconnected device might stay undetected and lead to timeouts until the TCP connection is reopened. &lt;br /&gt;
:This attribute specifies after how many timeouts an automatic reconnect is tried.&lt;br /&gt;
&lt;br /&gt;
;dev-h-brokenFC3&lt;br /&gt;
:workaround for some broken Modbus function code 3 implementations&lt;br /&gt;
&lt;br /&gt;
;disable&lt;br /&gt;
:stop communication with the device while this attribute is set to 1. For Modbus over TCP this also closes the TCP connection.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.Modbus.org Modbus.org]&lt;br /&gt;
* About Modbus ([http://en.wikipedia.org/wiki/Modbus English] / [http://de.wikipedia.org/wiki/Modbus German])&lt;br /&gt;
* Perl [http://perldoc.perl.org/functions/pack.html unpack codes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39275</id>
		<title>Weiteres Beispiel - SMA Wechselrichter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weiteres_Beispiel_-_SMA_Wechselrichter&amp;diff=39275"/>
		<updated>2024-04-22T19:52:13Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Ein weiteres Beispiel für die Konfiguration eines FHEM-Modbus-Clients der auf einen SMA-Wechselrichter zugreift&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier auf Basis [https://forum.fhem.de/index.php?PHPSESSID=0r7498gqu6nfenvipunrp94feq&amp;amp;topic=75638.1215 der Diskussion] im Forum ein weiteres Beispiel, das exemplarisch zeigt, wie bei [https://files.sma.de/downloads/EDMx-Modbus-TI-de-16.pdf SMA-Wechselrichtern] die Sprache gewechselt werden kann. Dazu wird der Wert des Doppel-Halteregisters 40013 ausgelesen bzw. gesetzt. 777 entspricht dabei DE, 778 EN.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
   define SI ModbusAttr 3 10 192.168.188.38:502 TCP&lt;br /&gt;
   attr SI closeAfterResponse 0&lt;br /&gt;
   attr SI dev-h-defLen 2&lt;br /&gt;
   attr SI dev-h-defPoll 0&lt;br /&gt;
   attr SI dev-h-defRevRegs 0&lt;br /&gt;
   attr SI dev-h-defUnpack N&lt;br /&gt;
   attr SI dev-type-ENUM_JN-hint EN,DE&lt;br /&gt;
   attr SI dev-type-ENUM_JN-map 777:DE,778:EN&lt;br /&gt;
   attr SI dev-type-ENUM_JN-revRegs 0&lt;br /&gt;
   attr SI enableControlSet 1&lt;br /&gt;
   attr SI obj-h40013-reading Sprache&lt;br /&gt;
   attr SI obj-h40013-set 1&lt;br /&gt;
   attr SI obj-h40013-showGet 1&lt;br /&gt;
   attr SI room SYSTEM-&amp;gt;modbus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39231</id>
		<title>ModbusAttr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ModbusAttr&amp;diff=39231"/>
		<updated>2024-04-14T18:01:46Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Configuration of the module as master or passive listener */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Extract information from devices with a Modbus interface or send information to such devices &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ModbusAttr&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModFTopic=25315&lt;br /&gt;
|ModTechName=98_ModbusAttr.pm&lt;br /&gt;
|ModOwner=StefanStrobel ({{Link2FU|3960|Forum}} / [[Benutzer:StefanStrobel|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[ModbusAttr]] uses the low level Modbus module 98_[[Modbus]].pm to provide a generic Modbus module (as master, slave, relay or passive listener) &lt;br /&gt;
that can be configured by attributes similar to the way HTTPMOD works for devices with a web interface.&lt;br /&gt;
&lt;br /&gt;
ModbusAttr can be used as a Modbus master that queries data from other devices over a serial RS232 / RS485 or TCP connection, &lt;br /&gt;
it can be used as a Modbus slave that can make readings of Fhem devices available via Modbus to external Modbus masters,&lt;br /&gt;
it can act as a Modbus relay that receives requests over one connection and forwards them over another connection (e.g. from Modbus TCP to serial Modbus RTU)&lt;br /&gt;
or it can passively listen to other devices that communicate over a serial RS485 connection and extract readings from the objects it sees.&lt;br /&gt;
The supported protocols are Modbus RTU, Modbus ASCII or Modbus TCP.&lt;br /&gt;
&lt;br /&gt;
There are several attributes that modify the way data objects are converted before they are stored in readings or sent to a device. Data can be modified by a perl expression defined in an atribute, formatted with a format string defined in another attribute or mapped to a table defined in an attribute.&lt;br /&gt;
&lt;br /&gt;
Readings can directly correspond to one data object or they can span several objects. A float value for example might be stored in two input or holding registers in the Modbus device. By specifying attributes that define the length of a reading in objects and by specifying the unpack code to get from a raw string to perl variables, all these cases can be described by attributes and no perl coding is necessary.&lt;br /&gt;
&lt;br /&gt;
== Availability == &lt;br /&gt;
The module has been checked in.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
This module uses the [[Modbus|Modbus base module 98_Modbus.pm]] which uses the DevIO module&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus master == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;iodevice&amp;gt; Modbus /dev/device@baudrate,bits,parity,stop&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;RTU|ASCII&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; &amp;lt;Interval&amp;gt; &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the first case the module connects to the external Modbus device with Modbus Id &amp;lt;Id&amp;gt; through a serial modbus device (RS232 or RS485).&lt;br /&gt;
&lt;br /&gt;
In the second case it connects directly through Modbus TCP or Modbus RTU or ASCII over TCP.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;Interval&amp;gt; is not 0 then the module actively requests data from that device every &amp;lt;Interval&amp;gt; seconds.&lt;br /&gt;
&lt;br /&gt;
The objects that the module should request and the readings it should create from these objects have to be defined with attributes (see below). &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
Interval can be 0 in which case the Module only requests data when it is triggered with a Fhem get-Command.&lt;br /&gt;
With this mode a Fhem installation can for example query sensor data from a heating system, energy meter or solar power installation if these systems offer a Modbus interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 1 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ModbusLine Modbus /dev/ttyUSB1@9600&lt;br /&gt;
define WP ModbusAttr 20 0 ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define WP as a Modbus master that communicates through the Modbus serial interface device named ModbusLine with Modbus ASCII. &lt;br /&gt;
Use Modbus Id 20 and don&#039;t query the device in a defined interval. Instead individual SET / GET options have to be used for communication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 5 60 192.168.1.122:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus TCP to a device with IP-Address 192.168.1.122 and the reserved port for Modbus TCP 502&lt;br /&gt;
Note that for Modbus over a TCP connection you don&#039;t need a basic Modbus device for the interface like ModbusLine above. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WP ModbusAttr 3 60 192.168.1.122:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to talk Modbus RTU over TCP and use the port number 8000&lt;br /&gt;
    &lt;br /&gt;
== Define as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; slave &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will respond to their requests if the requests contain the given Modbus &amp;lt;Id&amp;gt;&lt;br /&gt;
To provide data with Modbus to external Modbus masters a mapping needs to be defined using attributes. &lt;br /&gt;
These attributes will define a mapping from Readings inside Fhem to so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; and their Modbus object address together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example supply data to a PLC that actively reads data from Fhem or writes data to Fhem readings.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Define Data4PLC as a Modbus slave that communicates through the Modbus serial interface device named MRS485 to listen for Modbus requests with Id 1. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 20 slave ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen for Modbus requests with Id 20 with Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 5 slave 192.168.1.2:502 TCP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to start listening to TCP port 502 on the local address 192.168.1.2. Modbus TCP will be used as protocol and Requests with Modbus Id 5 will be answered.&lt;br /&gt;
&lt;br /&gt;
Please be aware that opening a port number smaller than 1024 needs root permissions on Unix devices. So it is probably better to use a non standard port number above 1024 instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Data4PLC ModbusAttr 3 slave 192.168.1.2:8000 RTU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to listen to the local port 8000 and talk Modbus RTU over TCP&lt;br /&gt;
&lt;br /&gt;
== Define as Modbus passive listener == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; passive &amp;lt;RTU|ASCII|TCP&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The module listens on a serial (RS485) connection for modbus communication with the given Modbus &amp;lt;Id&amp;gt; and extracts readings. It does not send requests by itself but waits for another master to communicate with a slave. So only objects that the other master requests can be seen by Fhem in this configuration. &lt;br /&gt;
The objects that the module recognizes and the readings that it should create from these objects have to be defined with attributes (see below) in the same way as for a Modbus master. &lt;br /&gt;
These attributes will define a mapping from so called &amp;quot;coils&amp;quot;, &amp;quot;digital inputs&amp;quot;, &amp;quot;input registers&amp;quot; or &amp;quot;holding registers&amp;quot; of the external device to readings inside Fhem together with the data type and format of the values.&lt;br /&gt;
With this mode a Fhem installation can for example Listen to the communication between an energy counter as slave and a solar control system as master if they use Modbus RTU over RS485. Since only one Master is allowed when using Modbus over serial lines, Fhem can not be master itself. As a passive listener it can however see when the master queries e.g. the current power consumption and then also see the reply from the energy meter and store the value in a Fhem reading.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 1 passive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passively listen for Modbus requests and replies with Id 1 over a serial interface managed by an already defined basic modbus device named MB-485. The protocol defaults to Modbus RTU&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define WP ModbusAttr 20 passive ASCII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to passivel listen for Modbus requests / replies with Id 20 and Modbus ASCII. &lt;br /&gt;
&lt;br /&gt;
== Define as Modbus relay == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
for a relay from a serial line to a defined master or&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; ModbusAttr &amp;lt;Id&amp;gt; relay &amp;lt;Address:Port&amp;gt; &amp;lt;RTU|ASCII|TCP&amp;gt; to &amp;lt;FhemMasterDevice&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For a relay that listens to modbus requests from a network connection.&lt;br /&gt;
&lt;br /&gt;
The module waits for connections from other Modbus masters. It will forward requests if they match the given Modbus &amp;lt;Id&amp;gt; to an already defined Modbus Master device inside Fhem which will send them to its defined slave, take the reply and then pass it back to the original Master.&lt;br /&gt;
With this mode a Fhem installation can for example be used in front of a device that only speaks Modbus RTU over RS485 to make it available via Modbus TCP over the local network. &lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-485 Modbus /dev/ttyUSB2&lt;br /&gt;
define Heating ModbusAttr 22 0&lt;br /&gt;
define Relay ModbusAttr 33 relay 192.168.1.2:1502 TCP to Heating&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-485 as a base device for the RS-485 communication with a heating system, &lt;br /&gt;
defines Heating as a Modbus Master to communicate with the Heating and its Modbus ID 22, &lt;br /&gt;
and then defines the relay which listens to the local IP address 192.168.1.2, TCP port 1502, Modbus Id 33 and protocol Modbus-TCP.&lt;br /&gt;
Requests coming in through Modbus TCP and port 1502 are then translated to Modbus RTU and forwarded via RS-485 to the heating system with Modbus Id 22.&lt;br /&gt;
&lt;br /&gt;
Please note that the IP address specified in the relay definition is a local IP address of the relay itself and that the port number is 1502, not 502 because Fhem running on Linux can not easily open listening port numbers below 1024 unless it is running as root.&lt;br /&gt;
&lt;br /&gt;
Other (unlikely) Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MB-232 Modbus /dev/ttyUSB2@19200&lt;br /&gt;
define Solar ModbusAttr 7 0 192.168.1.122:502 RTU&lt;br /&gt;
define PLC2NetRelay ModbusAttr 1 ASCII relay to Solar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defines MB-232 as a base device for the RS-232 communication with a PLC as Modbus master, &lt;br /&gt;
defines Solar as a Modbus Master to communicate with Modbus TCP to a Solar power system at IP Adrress 192.168.1.122 and its Modbus ID 7, &lt;br /&gt;
and then defines the PLC2NetRelay as a relay which listens to Modbus-ASCII requests over the serial RS-232 link from a PLC to Modbus ID 1.&lt;br /&gt;
Requests to Modbus Id 1 coming in through the serial link are then translated to Modbus TCP and forwarded over the network to the solar power system with Modbus Id 7.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as master or passive listener == &lt;br /&gt;
&lt;br /&gt;
Data objects (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus master or passive listener, the attributes assign data objects of external devices (heating systems, power meters, PLCs or other) with their register addresses to readings inside fhem and control how these readings are calculated from the raw values and how they are formatted.&lt;br /&gt;
Please be aware that Modbus does not define common data types so the representation of a value can be very different from device to device. One device might make a temperature value avaliable as a floating point value that is stored in two holding resgisters, another device might store the temperature multiplied with 10 as an signed integer in one register. Even the order of bytes can vary.&lt;br /&gt;
Therefore it is typically necessary to specify the data representation as a Perl unpack code.&lt;br /&gt;
A Modbus master can also write values to Objects in the device and attributes define how this is done.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz | RNTyp=y | RNText=To set the following attributes, modify the examples and then add them to the FHEM command line at the top of the web interface. The usual procedure in the web interface is apparently only supported afterwards.}} &lt;br /&gt;
&lt;br /&gt;
Example for a Modbus master or passive configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define PWP ModbusAttr 5 30&lt;br /&gt;
attr PWP obj-h256-reading Temp_Wasser_ein&lt;br /&gt;
attr PWP obj-h256-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
attr PWP obj-h258-expr $val/10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h262-reading Temp_Luft&lt;br /&gt;
attr PWP obj-h262-expr $val / 10&lt;br /&gt;
&lt;br /&gt;
attr PWP obj-h770-reading Temp_Soll&lt;br /&gt;
attr PWP obj-h770-expr $val / 10&lt;br /&gt;
attr PWP obj-h770-set 1&lt;br /&gt;
attr PWP obj-h770-setexpr $val * 10&lt;br /&gt;
attr PWP obj-h770-max 32&lt;br /&gt;
attr PWP obj-h770-min 10&lt;br /&gt;
attr PWP obj-h770-hint 8,10,20,25,28,29,30,30.5,31,31.5,32&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-h-combine 5&lt;br /&gt;
attr PWP dev-h-defPoll 1&lt;br /&gt;
attr PWP dev-h-defUnpack n&lt;br /&gt;
&lt;br /&gt;
attr PWP room Pool-WP&lt;br /&gt;
attr PWP stateFormat {sprintf(&amp;quot;%.1f Grad&amp;quot;, ReadingsVal($name,&amp;quot;Temp_Wasser_Ein&amp;quot;,0))}&lt;br /&gt;
attr PWP webCmd Temp_Soll&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes to define data objects start with obj- followed by a code that identifies the type and address&lt;br /&gt;
of the data object. &lt;br /&gt;
&lt;br /&gt;
Modbus devices offer the following types of data objects: &lt;br /&gt;
&lt;br /&gt;
;holding registers (16 bit objects that can be read and written)&lt;br /&gt;
;input registers (16 bit objects that can only be read)&lt;br /&gt;
;coils (single bit objects that can be read and written)&lt;br /&gt;
;discrete inputs (single bit objects that can only be read)&lt;br /&gt;
&lt;br /&gt;
The module uses the first character of these data object types to define attributes. &lt;br /&gt;
Thus h770 refers to a holding register with the decimal address 770 and c120 refers to a coil with address 120. &lt;br /&gt;
The address has to be specified as pure decimal number. The address counting starts at address 0&lt;br /&gt;
&lt;br /&gt;
Please note that the documentation for devices sometimes uses different numbering. They might start counting with one instead of zero so if a voltage value is stored in input register number 107 according to the documentation of the device, it might technically mean register number 106 (in the Modbus protocol specification addresses start with 0).&lt;br /&gt;
Also some vendors use hexadecimal descriptions of their register addresses. So input register 107 might be noted as hex and means 263 or even 262 as decimal address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h258-reading Temp_Wasser_Aus&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
defines a reading with the name Temp_Wasser_Aus that is read from the Modbus holding register at address 258.&lt;br /&gt;
With the attribute ending on &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; you can define a perl expression to do some conversion or calculation on the raw value read from the device. &lt;br /&gt;
In the above example the raw value has to be devided by 10 to get the real value. If the raw value is also the final value then no &amp;lt;code&amp;gt;-expr&amp;lt;/code&amp;gt; attribute is necessary. &lt;br /&gt;
&lt;br /&gt;
An object attribute ending on &amp;lt;code&amp;gt;-set&amp;lt;/code&amp;gt; creates a fhem set option. &lt;br /&gt;
In the above example the reading Temp_Soll can be changed to 12 degrees by the user with the fhem command &amp;lt;code&amp;gt;set PWP Temp_Soll 12&amp;lt;/code&amp;gt;&lt;br /&gt;
The object attributes ending on &amp;lt;code&amp;gt;-min&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-max&amp;lt;/code&amp;gt; define min and max values for input validation &lt;br /&gt;
and the attribute ending on &amp;lt;code&amp;gt;-hint&amp;lt;/code&amp;gt; will tell fhem to create a selection list so the user can graphically select the defined values.&lt;br /&gt;
&lt;br /&gt;
To define general properties of the device you can specify attributes starting with &amp;lt;code&amp;gt;dev-&amp;lt;/code&amp;gt;. &lt;br /&gt;
E.g. with &amp;lt;code&amp;gt;dev-timing-timeout&amp;lt;/code&amp;gt; you can specify the timeout when waiting for a response from the device. &lt;br /&gt;
With &amp;lt;code&amp;gt;dev-h-&amp;lt;/code&amp;gt; you can specify several default values or general settings for all holding registers &lt;br /&gt;
like the function code to be used when reading or writing holding registers. &lt;br /&gt;
These attributes are optional and the module will use defaults that work in most cases. &lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-combine 5&amp;lt;/code&amp;gt; for example allows the module to combine read requests to objects having an address that differs 5 or less into one read request. &lt;br /&gt;
Without setting this attribute the module will start individual read requests for each object. &lt;br /&gt;
Typically the documentation for the modbus interface of a given device states the maximum number of objects that can be read in one function code 3 request.&lt;br /&gt;
&amp;lt;code&amp;gt;dev-h-defUnpack n&amp;lt;/code&amp;gt; means that the values in this example that the values are stored as unsigned short (16-bit) in &amp;quot;network&amp;quot; (big-endian) order. This is only one possibility of many. An integer value might be signed instead of unsigned or it might use different byte ordering (e.g. unpack codes v or s). &lt;br /&gt;
&lt;br /&gt;
== Handling Data Types == &lt;br /&gt;
&lt;br /&gt;
The Modbus protocol does not define data types. If the documentation of a device states that for example the current temperature is stored in holding register 102 this leaves room for many interpretations. Not only can the address 102 mean different things (actually decimal 102 or rather 101 if the vendor starts counting at 1 instead of 0 or even 257 or 258 if the vendor used hexadecimal addresses in his documentation ) also the data representation can be many different things. As in every programming language, there are many ways to represent numbers. They can be stored signed or unsigned, they can be integers or floating point numbers, the byte-order can be &amp;quot;big endian&amp;quot; or &amp;quot;small endian&amp;quot;, the value can be stored in one holding register or in two holding registers (floating point numbers typically take four bytes which means two holding registers).&lt;br /&gt;
The Modbus module allows flexible configuration of data representations be assigning a Perl unpack-code, a length, a Perl Expression, and the register ordering. The following example illustrates how this can be done:        &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP obj-h338-reading Pressure&lt;br /&gt;
attr PWP obj-h338-len 2&lt;br /&gt;
attr PWP obj-h338-unpack f&amp;gt;&lt;br /&gt;
attr PWP obj-h338-revRegs 1&lt;br /&gt;
attr PWP obj-h338-format %.2f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In This example a floating point value for the reading &amp;quot;Pressure&amp;quot; is read from the holding registers starting at address 338. &lt;br /&gt;
The value occupies 32 Bits and is therefore stored in two registers. The Perl pack code to use is f&amp;gt; which means a native single precision float in big endian format (byte order). With revRegs the module is instructed to reverse the order of the registers directly after reading. The format specification then defines how the value is formatted into a reading - in this case with two digits after the comma. See http://perldoc.perl.org/functions/pack.html for Perl pack / unpack codes and http://perldoc.perl.org/functions/sprintf.html for format specifications.&lt;br /&gt;
&lt;br /&gt;
If you need to read / write many objects for a device, defining all these parameters each time is not elegant. The Modbus module therefore offers twi ways to simplify this task: &lt;br /&gt;
You can define defaults for every type of object or you can define your own data types once and then refer to them.&lt;br /&gt;
This exampe shows how defaults can be specified for holding registers and input registers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PWP dev-h-defUnpack f&amp;gt;&lt;br /&gt;
attr PWP dev-h-defLen 2&lt;br /&gt;
attr PWP dev-h-defRevRegs 1&lt;br /&gt;
attr PWP dev-h-defFormat %.2f&lt;br /&gt;
&lt;br /&gt;
attr PWP dev-i-defUnpack n&lt;br /&gt;
attr PWP dev-i-defLen 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next example shows how you can define your own data types and then apply them to objects:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WP dev-type-VT_R4-format %.1f&lt;br /&gt;
attr WP dev-type-VT_R4-len 2&lt;br /&gt;
attr WP dev-type-VT_R4-revRegs 1&lt;br /&gt;
attr WP dev-type-VT_R4-unpack f&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr WP obj-h1234-reading Temp_In&lt;br /&gt;
attr WP obj-h1234-type VT_R4&lt;br /&gt;
attr WP obj-h1236-reading Temp_Out&lt;br /&gt;
attr WP obj-h1236-type VT_R4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This example defines a data type with the name VT_R4 which uses an unpack code of f&amp;gt;, length 2 and reversed register ordering. It then assigns this Type to the objects Temp_In and Temp_Out.&lt;br /&gt;
&lt;br /&gt;
== Configuration of the module as Modbus slave == &lt;br /&gt;
&lt;br /&gt;
Data objects that the module offers to external Modbus masters (holding registers, input registers, coils or discrete inputs) are defined using attributes. &lt;br /&gt;
If Fhem is Modbus slave, the attributes assign readings of Fhem devices to Modbus objects with their addresses and control how these objects are calculated from the reading values that exist in Fhem.&lt;br /&gt;
It is also possible to allow an external Modbus master to send write function codes and change the value of readings inside Fhem.&lt;br /&gt;
&lt;br /&gt;
Example for a Modbus slave configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define MRS485 Modbus /dev/ttyUSB2@9600,8,E,1&lt;br /&gt;
define Data4PLC ModbusAttr 1 slave&lt;br /&gt;
attr Data4PLC IODev MRS485&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h256-reading THSensTerrasse:temperature&lt;br /&gt;
attr Data4PLC obj-h256-unpack f&lt;br /&gt;
attr Data4PLC obj-h256-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h258-reading THSensTerrasse:humidity&lt;br /&gt;
attr Data4PLC obj-h258-unpack f&lt;br /&gt;
attr Data4PLC obj-h258-len 2&lt;br /&gt;
&lt;br /&gt;
attr Data4PLC obj-h260-reading myDummy:limit&lt;br /&gt;
attr Data4PLC obj-h260-unpack n&lt;br /&gt;
attr Data4PLC obj-h260-len 1&lt;br /&gt;
attr Data4PLC obj-h260-allowWrite 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example Fhem allows an external Modbus master to read the temperature of a Fhem device named THSensTerrasse through holding register 256 and the humidity of that Fhem device through holding register 258. Both are encoded as floting point values that span two registers. &lt;br /&gt;
The master can also read but also write the reading named limit of the device myDummy.&lt;br /&gt;
&lt;br /&gt;
== Set-Commands ==&lt;br /&gt;
can be defined for holding registers and coils by using attributes.&lt;br /&gt;
&lt;br /&gt;
Every object for which an attribute like &amp;lt;code&amp;gt;obj-xy-set&amp;lt;/code&amp;gt; is set to 1 will create a valid set option.&lt;br /&gt;
&lt;br /&gt;
Additionally the attribute &amp;lt;code&amp;gt;enableControlSet&amp;lt;/code&amp;gt; enables the set options &amp;lt;code&amp;gt;interval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;scanModbusObjects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;scanModbusIds&amp;lt;/code&amp;gt; (for devices connected with RTU / ASCII over a serial line).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;interval &amp;amp;lt;Interval&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:modifies the interval that was set during define. &lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops the interval timer that is used to automatically poll objects through Modbus.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;&lt;br /&gt;
:starts the interval timer that is used to automatically poll objects through Modbus. &lt;br /&gt;
:If an interval is specified during the define command then the interval timer is started automatically. &lt;br /&gt;
:However if you stop it with the command &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; stop&amp;lt;/code&amp;gt; &lt;br /&gt;
:then you can start it again with &amp;lt;code&amp;gt;set &amp;amp;lt;mydevice&amp;amp;gt; start&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;reread&amp;lt;/code&amp;gt;&lt;br /&gt;
:causes a read of all objects that are set to be polled in the defined interval. The interval timer is not modified.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusObjects &amp;amp;lt;startObj&amp;amp;gt; - &amp;amp;lt;endObj&amp;amp;gt; &amp;amp;lt;reqLen&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans the device objects and automatically creates attributes for each reply it gets. &lt;br /&gt;
:This might be useful for exploring devices without proper documentation. &lt;br /&gt;
:The following example starts a scan and queries the holding registers with addresses between 100 and 120. &lt;br /&gt;
:&amp;lt;code&amp;gt;set MyModbusAttrDevice scanModbusObjects h100-120&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:For each reply it gets, the module creates a reading like&lt;br /&gt;
:&amp;lt;code&amp;gt;scan-h100 hex=0021, string=.!, s=8448, s&amp;gt;=33, S=8448, S&amp;gt;=33&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:the representation of the result as hex is 0021 and&lt;br /&gt;
:the ASCII representation is .!. s, s&amp;gt;, S and S&amp;gt; are different representations with their Perl pack-code.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scanModbusIds &amp;amp;lt;startId&amp;amp;gt; - &amp;amp;lt;endId&amp;amp;gt; &amp;amp;lt;knownObj&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:scans for Modbus Ids on an RS485 Bus. The following set command for example starts a scan:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Device scanModbusId 1-7 h770&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:since many Modbus devices don&#039;t reply at all if an object is requested that does not exist, &lt;br /&gt;
:scanModbusId needs the adress of an object that is known to exist.&lt;br /&gt;
:If a device with Id 5 replies to a read request for holding register 770, a reading like the following will be created:&lt;br /&gt;
:&amp;lt;code&amp;gt;scanId-5-Response-h770 hex=0064, string=.d, s=25600, s&amp;gt;=100, S=25600, S&amp;gt;=100&amp;lt;/code&amp;gt;&lt;br /&gt;
;&amp;lt;code&amp;gt;scanStop&amp;lt;/code&amp;gt;&lt;br /&gt;
:stops any running scans.&lt;br /&gt;
;saveAsModule &amp;lt;name&amp;gt;&lt;br /&gt;
:experimental: saves the definitions of obj- and dev- attributes in a new fhem module file as /tmp/98_ModbusGen&amp;lt;name&amp;gt;.pm.&lt;br /&gt;
:if this file is copied into the fhem module subdirectory (e.g. /opt/fhem/FHEM) and fhem is restarted then instead of defining a device&lt;br /&gt;
:as ModbusAttr with all the attributes to define objects, you can just define a device of the new type ModbusGen&amp;lt;name&amp;gt; and all the &lt;br /&gt;
:objects will be there by default. However all definitions can still be changed / overriden with the attribues defined in ModbusAttr if needed.&lt;br /&gt;
&lt;br /&gt;
== Get-Commands ==&lt;br /&gt;
&lt;br /&gt;
Every reading can be manually requested by a Get. &lt;br /&gt;
Internally a Get command triggers the corresponding Modbus request to the device and the module then interprets the data and sets the right Fhem readings. To avoid huge option lists in FHEMWEB, the objects visible as Get in FHEMWEB can be defined by setting an attribute &amp;lt;code&amp;gt;obj-xy-showGet&amp;lt;/code&amp;gt; to 1.&lt;br /&gt;
&lt;br /&gt;
== All Attributes ==&lt;br /&gt;
&lt;br /&gt;
;readingFnAttributes&lt;br /&gt;
:the usual Fhem attributes for all devices&lt;br /&gt;
&lt;br /&gt;
;alignTime&lt;br /&gt;
:Aligns each periodic read request for the defined interval to this base time. &lt;br /&gt;
:This is typcally something like 00:00 (see the Fhem at command)&lt;br /&gt;
&lt;br /&gt;
;enableControlSet&lt;br /&gt;
:enables the built in set commands like interval, stop, start and reread (see above)        &lt;br /&gt;
&lt;br /&gt;
the following list of attributes can be applied to any data object by specifying the objects type and address in the variable part. &lt;br /&gt;
For many attributes you can also specify default values per object type (see dev- attributes later) or you can specify an object attribute without type and address (e.g. obj-len) which then applies as default for all objects:&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-reading &lt;br /&gt;
:define the name of a reading that corresponds to the Modbus data object of type c,d,i or h and a decimal address (e.g. obj-h225-reading).&lt;br /&gt;
	&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-name &lt;br /&gt;
:defines an optional internal name of this data object (this has no meaning for fhem and serves mainly documentation purposes.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-set &lt;br /&gt;
:if set to 1 then this data object can be changed (works only for holding registers and coils since discrete inputs and input registers can not be modified by definition.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-min &lt;br /&gt;
:defines a lower limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-max &lt;br /&gt;
:defines an upper limit to the value that can be written to this data object. This ist just used for input validation.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-hint &lt;br /&gt;
:this is used for set options and tells fhemweb what selection to display for the set option (list or slider etc.)&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-expr &lt;br /&gt;
:defines a perl expression that converts the raw value read from the device.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-ignoreExpr&lt;br /&gt;
:defines a perl expression that returns 1 if a value should be ignored and the existing reading should not be modified&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-map &lt;br /&gt;
:defines a map to convert values read from the device to more convenient values when the raw value is read from the device or back when the value to write has to be converted from the user value to a raw value that can be written. Example: 0:mittig, 1:oberhalb, 2:unterhalb &lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-setexpr &lt;br /&gt;
:defines a perl expression that converts the user specified value in a set to a raw value that can be sent to the device. This is typically the inversion of -expr above.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-format &lt;br /&gt;
:defines a format string to format the value read e.g. %.1f&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-len &lt;br /&gt;
:defines the length of the data object in registers. It defaults to 1. Some devices store 32 bit floating point values in two registers. In this case you can set this attribute to two.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-unpack &lt;br /&gt;
:defines the unpack code to convert the raw data string read from the device to a reading. For an unsigned integer in big endian format this would be &amp;quot;n&amp;quot;, for a signed 16 bit integer in big endian format this would be &amp;quot;s&amp;gt;&amp;quot; and for a 32 bit big endian float value this would be &amp;quot;f&amp;gt;&amp;quot;. (see the perl documentation of the pack function).&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-revRegs&lt;br /&gt;
:this is only applicable to objects that span several input registers or holding registers.&lt;br /&gt;
:when they are read then the order of the registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string. &lt;br /&gt;
:The same happens before the object is written with a set command.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-bswapRegs&lt;br /&gt;
:this is applicable to objects that span several input or holding registers.&lt;br /&gt;
:After the registers have been read and before they are writtem, &lt;br /&gt;
:all 16-bit values are treated big-endian and are reversed to little-endian by swapping the two 8 bit bytes. &lt;br /&gt;
:This functionality is most likely used for reading (ASCII) strings from the device &lt;br /&gt;
:that are stored as big-endian 16-bit values.&lt;br /&gt;
:example: original reading is &amp;quot;324d3130203a57577361657320722020&amp;quot;. After applying bswapRegs, &lt;br /&gt;
:the value will be &amp;quot;4d3230313a2057576173736572202020&amp;quot; which will result in the ASCII string &lt;br /&gt;
:&amp;quot;M201: WWasser   &amp;quot;. &lt;br /&gt;
:Should be used with &amp;quot;(a*)&amp;quot; as -unpack value.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-decode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function decode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 instead of utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-encode&lt;br /&gt;
:defines an encoding to be used in a call to the perl function encode to convert the raw data string &lt;br /&gt;
:read from the device to a reading. &lt;br /&gt;
:This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-showGet &lt;br /&gt;
:every reading can also be requested by a get command. However these get commands are not automatically offered in fhemweb. By specifying this attribute, the get will be visible in fhemweb.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-poll&lt;br /&gt;
:if set to 1 then this obeject is included in the cyclic update request as specified in the define command. If not set, then the object can manually be requested with a get command, but it is not automatically updated each interval. Note that this setting can also be specified as default for all objects with the dev- atributes described later.&lt;br /&gt;
&lt;br /&gt;
;obj-[cdih][1-9][0-9]*-polldelay &lt;br /&gt;
:this attribute allows to poll objects at a lower rate than the interval specified in the define command. you can either specify a time in seconds or number prefixed by &amp;quot;x&amp;quot; which means a multiple of the interval of the define command. if you specify a normal numer then it is interpreted as minimal time between the last read and another automatic read. Please note that this does not create an individual interval timer. Instead the normal interval timer defined by the interval of the define command will check if this reading is due or not yet. So the effective interval will always be a multiple of the interval of the define.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*read &lt;br /&gt;
:specifies the function code to use for reading this type of object. The default is 3 for holding registers, 1 for coils, 2 for discrete inputs and 4 for input registers.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*write &lt;br /&gt;
:specifies the function code to use for writing this type of object. The default is 6 for holding registers and 5 for coils. Discrete inputs and input registers can not be written by definition.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*combine &lt;br /&gt;
:defines how many adjacent objects can be read in one request. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defLen &lt;br /&gt;
:defines the default length for this object type. If not specified, the default is 1&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defFormat &lt;br /&gt;
:defines a default format string to use for this object type in a sprintf function on the values read from the device.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defExpr&lt;br /&gt;
:defines a default Perl expression to use for this object type to convert raw values read.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defIgnoreExpr&lt;br /&gt;
:defines a default Perl expression to decide when values should be ignored.&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defUnpack &lt;br /&gt;
:defines the default unpack code for this object type. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defRevRegs&lt;br /&gt;
:defines that the order of registers for objects that span several registers will be reversed before &lt;br /&gt;
:further interpretation / unpacking of the raw register string&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defBswapRegs&lt;br /&gt;
:per device default for swapping the bytes in Registers (see obj-bswapRegs above)&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defDecode&lt;br /&gt;
:defines a default for decoding the strings read from a different character set e.g. cp850&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defEncode&lt;br /&gt;
:defines a default for encoding the strings read (or after decoding from a different character set) e.g. utf8&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defPoll &lt;br /&gt;
:if set to 1 then all objects of this type will be included in the cyclic update by default. &lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*defShowGet &lt;br /&gt;
:if set to 1 then all objects of this type will have a visible get by default. &lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;dev-([cdih]-)*allowShortResponses &lt;br /&gt;
:if set to 1 the module will accept a response with valid checksum but data lengh &amp;lt; lengh in header&lt;br /&gt;
&lt;br /&gt;
;dev-timing-timeout &lt;br /&gt;
:timeout for the device (defaults to 2 seconds)&lt;br /&gt;
&lt;br /&gt;
;dev-timing-sendDelay &lt;br /&gt;
:delay to enforce between sending two requests to the device. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;dev-timing-commDelay &lt;br /&gt;
:delay between the last read and a next request. Default ist 0.1 seconds.&lt;br /&gt;
&lt;br /&gt;
;nextOpenDelay &lt;br /&gt;
:delay for Modbus-TCP connections. &lt;br /&gt;
:This defines how long the module should wait after a failed TCP connection attempt before the next reconnection attempt. &lt;br /&gt;
:This defaults to 60 seconds.&lt;br /&gt;
&lt;br /&gt;
;openTimeout     &lt;br /&gt;
:timeout to be used when opening a Modbus TCP connection (defaults to 3)&lt;br /&gt;
&lt;br /&gt;
;timeoutLogLevel &lt;br /&gt;
:log level that is used when logging a timeout. Defaults to 3. &lt;br /&gt;
&lt;br /&gt;
;silentReconnect &lt;br /&gt;
:if set to 1, then it will set the loglevel for &amp;quot;disconnected&amp;quot; and &amp;quot;reappeared&amp;quot; messages to 4 instead of 3&lt;br /&gt;
&lt;br /&gt;
;maxTimeoutsToReconnect &lt;br /&gt;
:this attribute is only valid for TCP connected devices. &lt;br /&gt;
:In such cases a disconnected device might stay undetected and lead to timeouts until the TCP connection is reopened. &lt;br /&gt;
:This attribute specifies after how many timeouts an automatic reconnect is tried.&lt;br /&gt;
&lt;br /&gt;
;dev-h-brokenFC3&lt;br /&gt;
:workaround for some broken Modbus function code 3 implementations&lt;br /&gt;
&lt;br /&gt;
;disable&lt;br /&gt;
:stop communication with the device while this attribute is set to 1. For Modbus over TCP this also closes the TCP connection.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.Modbus.org Modbus.org]&lt;br /&gt;
* About Modbus ([http://en.wikipedia.org/wiki/Modbus English] / [http://de.wikipedia.org/wiki/Modbus German])&lt;br /&gt;
* Perl [http://perldoc.perl.org/functions/pack.html unpack codes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38416</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38416"/>
		<updated>2023-06-13T19:57:39Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* FHEM-S5-Rolladensteuerung ergänzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen (2016)==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;Kommentar : ROLLOCTRL FB4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   1&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    NAME :ROLLO-CT&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :TOGG      E/A/D/B/T/Z: E  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :UP        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :STOP      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :DOWN      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :CTR       E/A/D/B/T/Z: Z&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :M1        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :M2        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001A      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001B      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   2             Pro Tastimpuls CTR inkrementier&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001C      :U   =  TOGG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001D      :SSV =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001E      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   3             Von 0 bis 3 zaehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001F      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0020      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0022      :&amp;gt;F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0023      :RD  =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0024      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   4             Abfrage auf positive Flanke UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0025      :U   =  UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0026      :L   KZ 001&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0028      :SVZ =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0029      :RB  =  UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002A      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002B      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   5            Abfrage auf postive Flanke Stop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002C      :U   =  STOP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002D      :RD  =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002E      :RB  =  STOP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002F      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   6            Abfrage auf positive Flanke Down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0030      :U   =  DOWN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0031      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0033      :SVZ =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0034      :RB  =  DOWN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0035      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0036      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   7             Bei CTR=1 Heben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0037      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0038      :L   KZ 001&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003A      :!=F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003B      :=   =  M1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003C      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   8             Bei CTR=3 Senken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003D      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003E      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0040      :!=F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0041      :=   =  M2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0042      :BE&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Kommentar : PB4&lt;br /&gt;
&lt;br /&gt;
Autor     : krueuw&lt;br /&gt;
&lt;br /&gt;
Erstellt  :  Geaendert am:            BIB:&lt;br /&gt;
&lt;br /&gt;
NETZWERK   1            EG NW-Zimmer&lt;br /&gt;
&lt;br /&gt;
0000      :SPA FB 4&lt;br /&gt;
&lt;br /&gt;
0001 NAME :ROLLO-CT&lt;br /&gt;
&lt;br /&gt;
0002 TOGG &amp;gt;    E  65.2                              (E/BI)&lt;br /&gt;
&lt;br /&gt;
0003 UP   &amp;gt;    M  176.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0004 STOP &amp;gt;    M  177.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0005 DOWN &amp;gt;    M  178.3                             (A/BI)&lt;br /&gt;
&lt;br /&gt;
0006 CTR  &amp;gt;    Z  10                                (Z/)&lt;br /&gt;
&lt;br /&gt;
0007 M1   &amp;gt;    A  11.4                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0008 M2   &amp;gt;    A  11.5                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0009      :***  &lt;br /&gt;
&lt;br /&gt;
:BE&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
Dann ist der Weg für die Steuerung über die Module ROLLO und ASC frei:&lt;br /&gt;
[[Datei:Rollo-Konfiguration.png|alternativtext=x|links|1539x1539px]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 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. }} &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; 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.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
Ausschnitt aus der [[Konfiguration]], komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;gt;&lt;br /&gt;
networks:&lt;br /&gt;
        - fhem-network&lt;br /&gt;
devices:&lt;br /&gt;
     #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=diesem Forenbeitrag}}&#039;&#039;&#039; eine Lösung vorgeschlagen, die ich hier realisiert habe. Die zugehörige Definition: &#039;&#039;&#039;[[raspi docker-compose.yml]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
:&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren (2023) ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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.&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## Forenthema &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=FHEM in Docker mit IP-Adresse aus dem Host-Subnetz - nötig für Multicastempfang}}&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;[[futro-docker-compose.yml]]&#039;&#039;&#039; mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
# den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
# Log-DB neuaufsetzen,&lt;br /&gt;
# 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: &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo modprobe -r pl2303 &amp;amp;&amp;amp; sudo modprobe  pl2303&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38415</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38415"/>
		<updated>2023-06-13T19:56:38Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* FHEM-S5-Rolladensteuerung ergänzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen (2016)==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;Kommentar : ROLLOCTRL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Autor     : Uwe Krueger&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Erstellt  :12.06.2023  Geaendert am:            BIB:0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   1&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    NAME :ROLLO-CT&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :TOGG      E/A/D/B/T/Z: E  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :UP        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :STOP      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :DOWN      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :CTR       E/A/D/B/T/Z: Z&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :M1        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;    BEZ  :M2        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001A      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001B      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   2             Pro Tastimpuls CTR inkrementier&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001C      :U   =  TOGG&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001D      :SSV =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001E      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   3             Von 0 bis 3 zaehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;001F      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0020      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0022      :&amp;gt;F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0023      :RD  =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0024      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   4             Abfrage auf positive Flanke UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0025      :U   =  UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0026      :L   KZ 001&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0028      :SVZ =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0029      :RB  =  UP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002A      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002B      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   5            Abfrage auf postive Flanke Stop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002C      :U   =  STOP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002D      :RD  =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002E      :RB  =  STOP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;002F      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   6            Abfrage auf positive Flanke Down&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0030      :U   =  DOWN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0031      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0033      :SVZ =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0034      :RB  =  DOWN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0035      :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0036      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   7             Bei CTR=1 Heben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0037      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0038      :L   KZ 001&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003A      :!=F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003B      :=   =  M1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003C      :***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NETZWERK   8             Bei CTR=3 Senken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003D      :L   =  CTR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;003E      :L   KZ 003&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0040      :!=F&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0041      :=   =  M2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0042      :BE&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Kommentar : PB4&lt;br /&gt;
&lt;br /&gt;
Autor     : krueuw&lt;br /&gt;
&lt;br /&gt;
Erstellt  :  Geaendert am:            BIB:&lt;br /&gt;
&lt;br /&gt;
NETZWERK   1            EG NW-Zimmer&lt;br /&gt;
&lt;br /&gt;
0000      :SPA FB 4&lt;br /&gt;
&lt;br /&gt;
0001 NAME :ROLLO-CT&lt;br /&gt;
&lt;br /&gt;
0002 TOGG &amp;gt;    E  65.2                              (E/BI)&lt;br /&gt;
&lt;br /&gt;
0003 UP   &amp;gt;    M  176.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0004 STOP &amp;gt;    M  177.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0005 DOWN &amp;gt;    M  178.3                             (A/BI)&lt;br /&gt;
&lt;br /&gt;
0006 CTR  &amp;gt;    Z  10                                (Z/)&lt;br /&gt;
&lt;br /&gt;
0007 M1   &amp;gt;    A  11.4                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0008 M2   &amp;gt;    A  11.5                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0009      :***  &lt;br /&gt;
&lt;br /&gt;
:BE&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
Dann ist der Weg für die Steuerung über die Module ROLLO und ASC frei:&lt;br /&gt;
[[Datei:Rollo-Konfiguration.png|alternativtext=x|links|1539x1539px]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 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. }} &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; 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.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
Ausschnitt aus der [[Konfiguration]], komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;gt;&lt;br /&gt;
networks:&lt;br /&gt;
        - fhem-network&lt;br /&gt;
devices:&lt;br /&gt;
     #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=diesem Forenbeitrag}}&#039;&#039;&#039; eine Lösung vorgeschlagen, die ich hier realisiert habe. Die zugehörige Definition: &#039;&#039;&#039;[[raspi docker-compose.yml]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
:&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren (2023) ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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.&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## Forenthema &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=FHEM in Docker mit IP-Adresse aus dem Host-Subnetz - nötig für Multicastempfang}}&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;[[futro-docker-compose.yml]]&#039;&#039;&#039; mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
# den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
# Log-DB neuaufsetzen,&lt;br /&gt;
# 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: &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo modprobe -r pl2303 &amp;amp;&amp;amp; sudo modprobe  pl2303&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38414</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38414"/>
		<updated>2023-06-13T19:54:35Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* FHEM-S5-Rolladensteuerung ergänzen um FB und Rollo*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen (2016)==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;Kommentar : ROLLOCTRL FB4&lt;br /&gt;
 Autor     : krueuw&lt;br /&gt;
 Erstellt  :  Geaendert am:            BIB:0&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   1&lt;br /&gt;
      NAME :ROLLO-CT&lt;br /&gt;
      BEZ  :TOGG      E/A/D/B/T/Z: E  BI/BY/W/D: BI&lt;br /&gt;
      BEZ  :UP        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
      BEZ  :STOP      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
      BEZ  :DOWN      E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
      BEZ  :CTR       E/A/D/B/T/Z: Z&lt;br /&gt;
      BEZ  :M1        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
      BEZ  :M2        E/A/D/B/T/Z: A  BI/BY/W/D: BI&lt;br /&gt;
 &lt;br /&gt;
 001A      :&lt;br /&gt;
 001B      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   2             Pro Tastimpuls CTR inkrement&lt;br /&gt;
 001C      :U   =  TOGG&lt;br /&gt;
 001D      :SSV =  CTR&lt;br /&gt;
 001E      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   3             Von 0 bis 3 zaehlen&lt;br /&gt;
 001F      :L   =  CTR&lt;br /&gt;
 0020      :L   KZ 003&lt;br /&gt;
 0022      :&amp;gt;F&lt;br /&gt;
 0023      :RD  =  CTR&lt;br /&gt;
 0024      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   4             Abfrage auf positive Flanke UP&lt;br /&gt;
 0025      :U   =  UP&lt;br /&gt;
 0026      :L   KZ 001&lt;br /&gt;
 0028      :SVZ =  CTR&lt;br /&gt;
 0029      :RB  =  UP&lt;br /&gt;
 002A      :&lt;br /&gt;
 002B      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   5            Abfrage auf postive Flanke Stop&lt;br /&gt;
 002C      :U   =  STOP&lt;br /&gt;
 002D      :RD  =  CTR&lt;br /&gt;
 002E      :RB  =  STOP&lt;br /&gt;
 002F      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   6            Abfrage auf positive Flanke Down&lt;br /&gt;
 0030      :U   =  DOWN&lt;br /&gt;
 0031      :L   KZ 003&lt;br /&gt;
 0033      :SVZ =  CTR&lt;br /&gt;
 0034      :RB  =  DOWN&lt;br /&gt;
 0035      :&lt;br /&gt;
 0036      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   7             Bei CTR=1 Heben&lt;br /&gt;
 0037      :L   =  CTR&lt;br /&gt;
 0038      :L   KZ 001&lt;br /&gt;
 003A      :!=F&lt;br /&gt;
 003B      :=   =  M1&lt;br /&gt;
 003C      :***&lt;br /&gt;
 &lt;br /&gt;
 NETZWERK   8             Bei CTR=3 Senken&lt;br /&gt;
 003D      :L   =  CTR&lt;br /&gt;
 003E      :L   KZ 003&lt;br /&gt;
 0040      :!=F&lt;br /&gt;
 0041      :=   =  M2&lt;br /&gt;
 0042      :BE&amp;lt;/code&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Kommentar : PB4&lt;br /&gt;
&lt;br /&gt;
Autor     : krueuw&lt;br /&gt;
&lt;br /&gt;
Erstellt  :  Geaendert am:            BIB:&lt;br /&gt;
&lt;br /&gt;
NETZWERK   1            EG NW-Zimmer&lt;br /&gt;
&lt;br /&gt;
0000      :SPA FB 4&lt;br /&gt;
&lt;br /&gt;
0001 NAME :ROLLO-CT&lt;br /&gt;
&lt;br /&gt;
0002 TOGG &amp;gt;    E  65.2                              (E/BI)&lt;br /&gt;
&lt;br /&gt;
0003 UP   &amp;gt;    M  176.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0004 STOP &amp;gt;    M  177.3                            (A/BI)&lt;br /&gt;
&lt;br /&gt;
0005 DOWN &amp;gt;    M  178.3                             (A/BI)&lt;br /&gt;
&lt;br /&gt;
0006 CTR  &amp;gt;    Z  10                                (Z/)&lt;br /&gt;
&lt;br /&gt;
0007 M1   &amp;gt;    A  11.4                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0008 M2   &amp;gt;    A  11.5                              (A/BI)&lt;br /&gt;
&lt;br /&gt;
0009      :***  &lt;br /&gt;
&lt;br /&gt;
:BE&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
Dann ist der Weg für die Steuerung über die Module ROLLO und ASC frei:&lt;br /&gt;
[[Datei:Rollo-Konfiguration.png|alternativtext=x|links|1539x1539px]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 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. }} &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; 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.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
Ausschnitt aus der [[Konfiguration]], komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;gt;&lt;br /&gt;
networks:&lt;br /&gt;
        - fhem-network&lt;br /&gt;
devices:&lt;br /&gt;
     #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
        - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=diesem Forenbeitrag}}&#039;&#039;&#039; eine Lösung vorgeschlagen, die ich hier realisiert habe. Die zugehörige Definition: &#039;&#039;&#039;[[raspi docker-compose.yml]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
:&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren (2023) ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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.&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## Forenthema &#039;&#039;&#039;{{Link2Forum|Topic=114284|LinkText=FHEM in Docker mit IP-Adresse aus dem Host-Subnetz - nötig für Multicastempfang}}&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;[[futro-docker-compose.yml]]&#039;&#039;&#039; mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
# den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
# Log-DB neuaufsetzen,&lt;br /&gt;
# 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: &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo modprobe -r pl2303 &amp;amp;&amp;amp; sudo modprobe  pl2303&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Rollo-Konfiguration.png&amp;diff=38413</id>
		<title>Datei:Rollo-Konfiguration.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Rollo-Konfiguration.png&amp;diff=38413"/>
		<updated>2023-06-13T19:52:03Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASC + ROLLO&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Exemplarische_ROLLO_%2B_ASC_Konfiguration.png&amp;diff=38412</id>
		<title>Datei:Exemplarische ROLLO + ASC Konfiguration.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Exemplarische_ROLLO_%2B_ASC_Konfiguration.png&amp;diff=38412"/>
		<updated>2023-06-13T19:49:42Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das ROLLO- bzw. das ASC-Modul steuern über S7-Merker den Rollladen.&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=38375</id>
		<title>ROLLO</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=38375"/>
		<updated>2023-05-25T07:52:19Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Attribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:ROLLO}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Rollo-Steuerung zur einfachen Anzeige/Programmierung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModFTopic=95832&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM ----&amp;gt;&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=44_ROLLO.pm&lt;br /&gt;
|ModOwner=KernSani}}&lt;br /&gt;
Das Modul [[ROLLO]] bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet.&lt;br /&gt;
Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Modul unterstützt beliebige Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.&lt;br /&gt;
&lt;br /&gt;
* Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Rolladen Eintrag.PNG|right|thumb|400px|Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen]]&lt;br /&gt;
Vorteil dieses Moduls:&lt;br /&gt;
&lt;br /&gt;
Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt.&lt;br /&gt;
Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden. Das Status-Icon ist anklickbar.&lt;br /&gt;
Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Das eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist &amp;quot;nur&amp;quot; eine Oberfläche/Bedienmodul, kein Hardwaremodul.&lt;br /&gt;
&lt;br /&gt;
Wenn ROLLO installiert wurde, bevor es Bestandteil von FHEM wurde und lange kein Update gemacht wurde, wirst du die &amp;quot;position&amp;quot; readings und das entsprechende set Kommando vermissen. &amp;quot;position&amp;quot; wurde durch &amp;quot;pct&amp;quot; ersetzt, um Kompatibilität mit anderen Modulen [https://fhem.de/commandref_DE.html#AutoShuttersControl Automatic Shutter Control - ASC] sicher zu stellen. Bitte passe deine NOTIFYs/DOIFs entsprechend an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieses Modul ist in der offiziellen FHEM-Auslieferung enthalten.}}&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
 define &amp;lt;name&amp;gt; ROLLO&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|rl_type ||attr &amp;lt;Rollo-Device&amp;gt; rl_type [normal|HomeKit] ||||Typunterscheidung zur unterstützung verschiedener Hardware. Abhängig vom gewählten Typ wird die Richtung von der die pct gerechnet wird festgelegt:&lt;br /&gt;
&lt;br /&gt;
    normal = pct 0 ist offen, pct 100 ist geschlossen&lt;br /&gt;
    HomeKit = pct 100 ist offen, pct 0 ist geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsDown||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsDown &amp;lt;number&amp;gt; ||||Sekunden zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsUp &amp;lt;number&amp;gt; ||||Sekunden zum Herunterfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessTop ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessTop &amp;lt;number&amp;gt; ||||Zeit, die mein Rollo fahren muss, ohne dass sich die Rollo-pct ändert (bei mir fährt der Rollo noch in die Wand, ohne dass man es am Fenster sieht, die pct ist also schon bei 0%).&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessBottom ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessBottom &amp;lt;number&amp;gt; ||||(siehe excessTop)&lt;br /&gt;
|-&lt;br /&gt;
|rl_switchTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_switchTime &amp;lt;number&amp;gt; ||||Zeit, die zwischen 2 gegensätzlichen Laufbefehlen pausiert werden soll, also wenn der Rollo z.B. gerade runter fährt und ich den Befehl gebe hoch zu fahren, dann soll 1 Sekunde gewartet werden bis der Motor wirklich zum Stillstand kommt, bevor es wieder in die andere Richtung weiter geht. Dies ist die einzige Zeit, die nichts mit der eigentlichen Laufzeit des Motors zu tun hat, sondern ein Timer zwischen den Laufzeiten.&lt;br /&gt;
|-&lt;br /&gt;
|rl_resetTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_resetTime &amp;lt;number&amp;gt; ||||Zeit, die beim Anfahren von Endpositionen (offen,geschlossen) der Motor zusätzlich an bleiben soll, um sicherzustellen, dass die Endposition wirklich angefahren wurde. Dadurch können Differenzen in der Positionsberechnung korrigiert werden.&lt;br /&gt;
|-&lt;br /&gt;
|rl_reactionTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_reactionTime &amp;lt;number&amp;gt; ||||Zeit für den Motor zum Reagieren&lt;br /&gt;
|-&lt;br /&gt;
|rl_autoStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_autoStop [0|1] ||||Es muss kein Stop-Befehl ausgeführt werden, das Rollo stoppt von selbst.&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandUp &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum Hochfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandDown &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum Runterfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStop &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopDown &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopUp &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_blockMode ||attr &amp;lt;Rollo-Device&amp;gt; rl_blockMode [blocked|force-open|force-closed|only-up|only-down|half-up|half-down|none] ||||wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:&lt;br /&gt;
&lt;br /&gt;
    blocked = Rollo lässt sich nicht mehr bewegen&lt;br /&gt;
    force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren&lt;br /&gt;
    force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren&lt;br /&gt;
    only-up = Befehle zum runterfahren werden ignoriert&lt;br /&gt;
    only-down = Befehle zum hochfahren werden ignoriert&lt;br /&gt;
    half-up = es werden nur die Positionen 50-100 angefahren, bei pct &amp;lt;50 wird pct 50% angefahren,&lt;br /&gt;
    half-down = es werden nur die Positionen 0-50 angefahren, bei pct &amp;gt;50 wird pct 50 angefahren&lt;br /&gt;
    none = block-Modus ist deaktiviert&lt;br /&gt;
|-&lt;br /&gt;
|automatic-enabled ||attr &amp;lt;Rollo-Device&amp;gt; automatic-enabled [on|off] ||||Wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo&lt;br /&gt;
|-&lt;br /&gt;
|automatic-delay ||attr &amp;lt;Rollo-Device&amp;gt; automatic-delay &amp;lt;number&amp;gt; ||||Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.&lt;br /&gt;
Hiermit kann einge Zeitverzögerung für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen Minuten später heruntergefahren.&lt;br /&gt;
|-&lt;br /&gt;
|rl_forceDrive ||attr &amp;lt;Rollo-Device&amp;gt; rl_forceDrive [0|1] ||||open/closed wird ausgeführt, auch wenn das ROLLO bereits in der Zielposition ist&lt;br /&gt;
|-&lt;br /&gt;
|rl_noSetPosBlocked ||attr &amp;lt;Rollo-Device&amp;gt; rl_noSetPosBlocked [0|1] ||||Wenn deaktiviert, können Positionsn (pct) auch gesetzt werden, wenn der ROLLO geblockt ist. Nach dem unblocken wird die entsprechende Position angefahren.&lt;br /&gt;
|-&lt;br /&gt;
|||disableattr &amp;lt;Rollo-Device&amp;gt; disable [0|1] ||||Wenn deaktiviert, können keine set oder get commandos für den ROLLO ausgeführt werden.&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|open ||set &amp;lt;Rollo-Device&amp;gt; open ||Fährt das Rollo komplett auf (pct 0)&lt;br /&gt;
|-&lt;br /&gt;
|closed ||set &amp;lt;Rollo-Device&amp;gt; closed||Fährt das Rollo komplett zu (pct 100)&lt;br /&gt;
|-&lt;br /&gt;
|up ||set &amp;lt;Rollo-Device&amp;gt; up ||Fährt das Rollo um 10 auf (pct +10)&lt;br /&gt;
|-&lt;br /&gt;
|down ||set &amp;lt;Rollo-Device&amp;gt; down ||Fährt das Rollo um 10 zu (pct -10)&lt;br /&gt;
|-&lt;br /&gt;
|half || set &amp;lt;Rollo-Device&amp;gt; half ||Fährt das Rollo zur Hälfte runter bzw. hoch (pct 50)&lt;br /&gt;
|-&lt;br /&gt;
|stop ||set &amp;lt;Rollo-Device&amp;gt; stop ||Stoppt das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|drive ||set &amp;lt;Rollo-Device&amp;gt; drive up 5||Fährt das Rollo in die angegebene Richtung für die angegebene Zeit (in Sekunden)&lt;br /&gt;
|-&lt;br /&gt;
|blocked ||set &amp;lt;Rollo-Device&amp;gt; blocked ||wenn aktiviert, kann der ROLLO nur noch eingeschränkt gesteuert werden. Siehe Attribut block_mode für Details.&lt;br /&gt;
|-&lt;br /&gt;
|unblocked ||set &amp;lt;Rollo-Device&amp;gt; unblocked ||Aktiviert einen geblockten ROLLO wieder für die normale Benutzung&lt;br /&gt;
|-&lt;br /&gt;
|pct ||set &amp;lt;Rollo-Device&amp;gt; pct &amp;lt;value&amp;gt; ||Fährt das Rollo auf eine beliebige pct zwischen 0 (offen) - 100 (geschlossen)&lt;br /&gt;
|-&lt;br /&gt;
|reset ||set &amp;lt;Rollo-Device&amp;gt; reset &amp;lt;value&amp;gt; ||Sagt dem Modul in welcher pct sich der Rollo befindet&lt;br /&gt;
|-&lt;br /&gt;
|extern ||set &amp;lt;Rollo-Device&amp;gt; extern &amp;lt;value&amp;gt; ||Der Software mitteilen dass gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen pct gestartet werden soll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|version ||get &amp;lt;Rollo-Device&amp;gt; version ||Gibt die version des Modul Rollos aus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!Wert !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|command||open,stop,closed||&lt;br /&gt;
|-&lt;br /&gt;
|desired_pct||0-100||Zielposition die angefahren werden soll (nur sinnvoll während das Rollo fährt)&lt;br /&gt;
|-&lt;br /&gt;
|drive-type||modul,extern||bei dem Befehl &amp;quot;set rollo extern ..&amp;quot; wird dieses attribut auf &amp;quot;extern&amp;quot; gestellt, sonst immer &amp;quot;modul&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|last_drive||drive-up,drive-down||die zuletzt benutzte Fahrtrichtung&lt;br /&gt;
|-&lt;br /&gt;
|pct||0-100||exakte Position des Rollo&lt;br /&gt;
|-&lt;br /&gt;
|state||open,closed,position-[0-100]||die Position gerundet auf ganze 10% Schritte, identisch mit dem Internal STATE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
===Set===&lt;br /&gt;
 set RolladenWohnzimmer pct 50&lt;br /&gt;
 set RolladenWohnzimmer geschlossen&lt;br /&gt;
 set RolladenWohnzimmer offen &lt;br /&gt;
Drei Beispiele das Rollo-Modul anzuweisen verschiedene Positionen anzufahren.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer extern stop&lt;br /&gt;
Das Rollo-Modul wird angewiesen den status auf &amp;quot;nicht fahren&amp;quot; zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer reset closed&lt;br /&gt;
In der Oberfläche von fhem wird für das Rollo die Position &amp;quot;geschlossen&amp;quot; gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird evtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.&lt;br /&gt;
&lt;br /&gt;
===Zusammenspiel mit externem Taster===&lt;br /&gt;
In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann. &lt;br /&gt;
Die Taster selber senden keine Events an fhem, nur der Rollo-Motor.&lt;br /&gt;
Hier ein Beispiel wie das ganze für aussehen könnte und diese Taster in das ROLLO-Modul integriert werden:&lt;br /&gt;
&lt;br /&gt;
 define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
 define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
&lt;br /&gt;
meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden. &lt;br /&gt;
Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set &amp;lt;extern&amp;gt; mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf &amp;quot;fahre hoch&amp;quot;.&lt;br /&gt;
IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set &amp;lt;extern&amp;gt; dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.&lt;br /&gt;
&lt;br /&gt;
Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.&lt;br /&gt;
&lt;br /&gt;
Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Auch eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=95832|LinkText=Forum}} seit das Modul Bestandteil der offiziellen FHEM Auslieferung ist&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=47202|LinkText=Forum}} bevor das Modul Bestandteil von FHEM war&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Grafana&amp;diff=38342</id>
		<title>Grafana</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Grafana&amp;diff=38342"/>
		<updated>2023-04-29T18:00:33Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Randnotiz für den ersten Start eingefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNText=Grafana beschreibt sich als &amp;quot;The open platform for beautiful analytics and monitoring&amp;quot;.&lt;br /&gt;
Eine Live Demo zum Erkunden findet man im Internet unter  [http://play.grafana.org play.grafana.org]}}&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
Die [[Grafana]]-Software stellt einen Server zur Verfügung, mit dem Zeitreihen von Zahlenwerten auf sehr handliche Weise dargestellt und manipuliert werden können. Die Auswahl bestimmter Zeitfenster, das Anlegen von Dashboards und die Gestaltung der Achsen (Minimum. Maximum) ist so sehr einfach möglich. Zudem gibt es verschiedene Paneltypen, die neben dem klassischen Chart (Line / Bar / Point) auch Pie Charts oder Tabellen beinhalten. Seit November 2017 kann Grafana  mit MySQL umgehen, was eine Einbindung in FHEM (via DBLog) ermöglicht. Die Benutzeroberfläche lädt sehr schnell und ist auf vielen Geräten flüssig und einfach zu bedienen.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Hier sind mehrere Schritte (einmalig) durchzuführen. Für Grafana muss ein eigener Server installiert werden und für die Grafiken müssen MySQL-Queries angelegt werden. &lt;br /&gt;
&lt;br /&gt;
=== Installation und Einrichtung einer DBLog Instanz mit MySQL ===&lt;br /&gt;
Details sind auf der Seite [[DbLog#Beispiel:_Anlegen_und_Nutzung_einer_Mysql-Datenbank|Anlegen einer MySQL_Datenbank]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
Wenn schon eine Datenbank angelegt wurde und man Daten umziehen muss, helfen andere Einträge weiter.&lt;br /&gt;
Sollen zum Beispiel Altdaten aus SQLite gesichert und wieder in MySQL eingespielt werden, [[DbRep - Reporting und Management von DbLog-Datenbankinhalten#Datensätze (Devices) von einer Datenbank in eine andere umziehen (Export/Import)|hilft dieser Eintrag]]. Dieses Beispiel sichert nur Logdaten für ein einzelnes Gerät und nicht für alles aus der DB. Das lässt sich aber problemlos anpassen, indem man das Attribut device in der DBRep Instanz nicht belegt.&lt;br /&gt;
&lt;br /&gt;
Ein Umstieg von Filelog auf DBLog geht ebenfalls. Sollen Altdaten aus den Filelogs übertragen werden, {{Link2Forum|Topic=66383|LinkText=hilft dieser Thread}}.&lt;br /&gt;
&lt;br /&gt;
=== Installation des Grafana Servers ===&lt;br /&gt;
Es gibt [https://grafana.com/grafana/download einen offiziellen Download]. Der ist nicht ganz unproblematisch, und will man auf einem Raspberry Pi installieren, sollten eher vorkompilierte Pakete genutzt werden. Sie sind [https://github.com/fg2it/grafana-on-raspberry/releases unter diesem Link] zu finden.&lt;br /&gt;
&lt;br /&gt;
Damit Grafana automatisch mit dem System startet, muss der Grafana Server noch aktiviert werden. Bei Verwendung von Systemd wäre das mit folgendem Befehl zu erledigen: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo /bin/systemctl enable grafana-server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Im Grafana Webinterface muss dann eine neue Datasource vom Typ MySQL angelegt werden. Die Daten der FHEM-MYSQL Datenbank eintragen (Port/User/Passwort).&lt;br /&gt;
&lt;br /&gt;
Grafana lauscht per default auf Port 3000. Dies kann ein Problem sein, falls man Alexa mit Custom Skill nutzt. Dieser Dienst belegt ebenfalls schon Port 3000.&lt;br /&gt;
In dem Fall mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo nano /etc/grafana/grafana.ini &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und die Konfiguration anpassen:&lt;br /&gt;
:&amp;lt;code&amp;gt;;http_port = 3000&amp;lt;/code&amp;gt;&lt;br /&gt;
Hier den führenden Semicolon entfernen und den Port entsprechend abändern. Zuletzt ist die Datenbank auszuwählen, in der die Daten von FHEM abgelegt sind (grafana greift standardmäßig auf eine Datenbank mit dem Namen grafana zurück).&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=http://pi:3000 im Browser zeigt die Login-Seite von Grafana. &lt;br /&gt;
&lt;br /&gt;
Nach Anmeldung mit admin/admin kann das Passwort auf einen sicheren Wert geändert werden.|RNTyp=Erfolgskontrolle}}&lt;br /&gt;
&lt;br /&gt;
== Erstellen von Grafiken ==&lt;br /&gt;
=== MySQL-Queries ===&lt;br /&gt;
Zeitreihen werden in Grafana durch MySQL-Queries angelegt. Jede Zeitreihe benötigt dabei einen eigenen Query. Grafana legt dabei einen Musterquery an, bei dem drei Werte geändert werden müssen. &lt;br /&gt;
[[Datei:Grafana_Query_anlegen.png|200px|thumb|right|Query anlegen]]  &lt;br /&gt;
&lt;br /&gt;
Man klickt im Dashboard von Grafana auf AddRow. Durch einen Klick auf den Titel der neuen Grafik erscheint ein Menü (&amp;quot;View&amp;quot;, &amp;quot;Edit&amp;quot;, &amp;quot;Share&amp;quot;) und wählt Edit. Dann wählt man die FHEM-Datenbank aus, siehe Screenshot. Eine Musterabfrage sieht wie folgt aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 SELECT&lt;br /&gt;
  UNIX_TIMESTAMP(&amp;lt; time &amp;gt;) as time_sec,&lt;br /&gt;
  &amp;lt; column &amp;gt; as value,&lt;br /&gt;
  &amp;lt; name &amp;gt; as metric  &lt;br /&gt;
  FROM &amp;lt; table name &amp;gt;   &lt;br /&gt;
  WHERE $__timeFilter(time_column)   &lt;br /&gt;
  ORDER BY &amp;lt; time &amp;gt; ASC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Grafana benötigt in diesem Query mindestens drei Spalten mit der richtigen Benennung, die durch &amp;lt;&amp;gt;-Klammern vorgezeichnet sind.&lt;br /&gt;
* time_sec muss Zeitwerte im UNIX-Timestamp Format (Sekunden seit 01.01.1970) enthalten. Meist wählt man für &amp;lt; time &amp;gt; daher den TIMESTAMP Eintrag aus der Datenbank.&lt;br /&gt;
* value muss Werte für die Y-Achse liefern, welche den Zeitstempeln aus time_sec zuzuordnen sind. Meist wählt man für &amp;lt; column &amp;gt; daher den VALUE Eintrag aus der Datenbank.&lt;br /&gt;
* metric ist der Text, der für die Kurve in der Legende angezeigt wird. Daher ist &amp;lt; name &amp;gt; frei wählbar.&lt;br /&gt;
&lt;br /&gt;
Die Namen der einzelnen Spalten werden durch FHEM selbst vergeben. Man muss also bei der Verwendung der Queries herausfinden, wie die Werte intern gespeichert werden. Das klingt schwerer als es ist, weil sich FHEM dabei an Konventionen hält, die leicht geraten werden können. Der nebenstehende Screenshot zeigt einen typischen Eintrag in der DBLog von FHEM.&lt;br /&gt;
[[Datei:TypischerQuery.png |200px|thumb|right|Typischer Eintrag in der DBLog]]  &lt;br /&gt;
&lt;br /&gt;
Beim den VALUE Einträgen von FHEM muss man beachten, dass diese (da sie auch Text beinhalten können) nicht numerisch sind. Soll schon intern im SELECT eine Berechnung durchgeführt werden wie AVG oder MIN/MAX, dann muss man hier CONVERT(VALUE, DOUBLE) oder CONVERT(VALUE, INTEGER) verwenden. &lt;br /&gt;
&lt;br /&gt;
Ein Beispieleintrag sieht wie folgt aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 SELECT&lt;br /&gt;
 UNIX_TIMESTAMP(TIMESTAMP) as time_sec,&lt;br /&gt;
 VALUE as value,  &amp;quot;Kurvenbezeichnung&amp;quot; as metric &lt;br /&gt;
 FROM history WHERE READING=&amp;quot;state&amp;quot;  AND DEVICE=&amp;quot;MyDummy&amp;quot; AND $__timeFilter( TIMESTAMP )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solltet Ihr numerische Werte in einer Grafik ausgeben wollen, müsst Ihr das Text-Feld VALUE mittels &#039;&#039;&#039;cast(VALUE as signed)&#039;&#039;&#039;  konvertieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 SELECT&lt;br /&gt;
 UNIX_TIMESTAMP(TIMESTAMP) as time_sec,&lt;br /&gt;
 cast(VALUE as signed) as value,  &amp;quot;Kurvenbezeichnung&amp;quot; as metric &lt;br /&gt;
 FROM history WHERE READING=&amp;quot;state&amp;quot;  AND DEVICE=&amp;quot;MyDummy&amp;quot; AND $__timeFilter( TIMESTAMP )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Macros ===&lt;br /&gt;
Grafana bietet ein paar Macros die man in den MySQL Selects verwenden kann, um die zu ladenden Daten auf den angezeigten Zeitraum zu begrenzen.&lt;br /&gt;
* $__timeFilter(TIMESTAMP) liefert eine Überprüfung auf einen Zeitraum zurück, die man in der WHERE Bedingung verwenden kann (siehe obiges Beispiel)&lt;br /&gt;
* $__timeFrom() liefert den Startzeitpunkt des angezeigten Zeitraums als &amp;quot;YYYY-MM-DD HH:MM:SS&amp;quot; zurück.&lt;br /&gt;
* $__timeTo() liefert den Endzeitpunkt des angezeigten Zeitraums als &amp;quot;YYYY-MM-DD HH:MM:SS&amp;quot; zurück (so loggt auch DBLog in die Datenbank).&lt;br /&gt;
* $__unixEpochFrom() liefert den Startzeitpunkt des angezeigten Zeitraums als UNIX-Timestamp Format (Sekunden seit 01.01.1970) zurück.&lt;br /&gt;
* $__unixEpochTo liefert den Endzeitpunkt des angezeigten Zeitraums als UNIX-Timestamp Format (Sekunden seit 01.01.1970) zurück.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
Sehr viele Beispiele hat Thyraz in diesem {{Link2Forum|Topic=77724|LinkText=Foreneintrag}} bereitgestellt. Eine ausführliche Erläuterung zu einen Anzeige von Differenzwerten finden sich in diesem [https://forum.fhem.de/index.php/topic,77724.msg1023943.html#msg1023943 Foreneintrag].&lt;br /&gt;
&lt;br /&gt;
=== Einbindung in FHEM (und andere Seiten) ===&lt;br /&gt;
Die Grafiken können mit einem URL einfach in FHEM und andere Seiten eingebunden werden. Die entsprechende Adresse lautet dann&lt;br /&gt;
 http://&amp;lt;URL-Grafana-Server&amp;gt;:3000/render/dashboard/db/&amp;lt;Name-des-Dashboards&amp;gt;?orgId=2&amp;amp;from=now%2Fd&amp;amp;to=now&amp;amp;panelId=1&amp;amp;width=750&amp;amp;height=300&amp;amp;tz=UTC%2B02%3A00&lt;br /&gt;
Dabei ist der Teil der URL from=now%2Fd&amp;amp;to=now individuell veränderbar. Standardmäßig sind das fixe Zeitpunkte (wie im Beispiel mit 1507705926296). Mit &amp;quot;Now&amp;quot; etc. kann man das dynamisch gestalten und so einen alternativen, dynamischen Plot im FHEM darstellen:&lt;br /&gt;
* from=now%2Fd&amp;amp;to=now: Today so far&lt;br /&gt;
* from=now-30d&amp;amp;to=now: Die letzten 30 Tage&lt;br /&gt;
* from=now-395d&amp;amp;to=now-365d: Die letzten 30 Tage vor einem Jahr (Temperaturvergleich zum Vorjahr z.B.)&lt;br /&gt;
&lt;br /&gt;
Das entsprechende device, das in FHEMWEB die Grafik zur Verfügung stellt, ist dann weblink:&lt;br /&gt;
 defmod &amp;lt;device_name&amp;gt; weblink image &amp;lt;HTTP-Adresse&amp;gt;:3000/render/dashboard-solo/db/&amp;lt;Datenbankname&amp;gt;?orgId=2&amp;amp;from=now%2Fd&amp;amp;to=now&amp;amp;panelId=1&amp;amp;width=750&amp;amp;height=300&amp;amp;tz=UTC%2B02%3A00&lt;br /&gt;
&lt;br /&gt;
Entsprechende Attribute sind auch möglich:&lt;br /&gt;
 attr &amp;lt;device-name&amp;gt; htmlattr width=&amp;quot;750&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; title=&amp;quot;Aktueller Verlauf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Bei FTUI würde man das Image Widget verwenden. Will man die Grafiken mit iframe einbinden, so muss zuerst in Grafana eine Sicherheitseinstellung verändert werden, die eigentlich eine solche iframe-Einbindung verhindert. Dazu fügt man im Security-Abschnitt der grafana.ini folgende Zeile ein&lt;br /&gt;
 [security]&lt;br /&gt;
 allow_embedding = true&lt;br /&gt;
und startet danach den grafana-server neu.&lt;br /&gt;
&lt;br /&gt;
=== Speichern und Senden von Grafiken (z.B. mit Telegram) ===&lt;br /&gt;
Will man Grafiken von Grafana mit Telegram oder anderen Messenger-Programmen versenden, sind mehrere Schritte notwendig. Zuerst muss die Datei &amp;quot;gerendert&amp;quot; und lokal gespeichert werden, danach kann man sie versenden. Da das Rendern &#039;&#039;mehrere Sekunden&#039;&#039; dauern kann, sollte dieser Vorgang entweder nonblocking oder sogar außerhalb von FHEM erfolgen. &lt;br /&gt;
 &lt;br /&gt;
==== Erster Schritt: Rendern ====&lt;br /&gt;
Grafana verwendet eine Authentifizierungsmethode, die beim Rendern zu berücksichtigen ist. Tut man das nicht, so erhält man keine Grafik, sondern nur eine HTML-Datei die eben anzeigt, dass der Zugriff nicht authentifiziert erfolgte. Um sich zu authentifizieren, muss man einen neuen Nutzer anlegen und einen API-Key anfordern.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GrafanaAPIKey.png|200px|thumb|right|Auswahl des API-Key im Grafana-Menü]]&lt;br /&gt;
Im Hauptmenü von Grafana wählt man links oben unter &amp;quot;admin&amp;quot; den Eintrag API-Key aus. Dort legt man einen neuen Benutzer an und notiert sich den Schlüssel (er wird nur einmal angezeigt). Dieser Schlüssel ist eine sehr lange Zeichenkette, beispielsweise &amp;quot;0NWcWRCVjZtSkd81NG1EOEprdVYxRUJtZWZeyJrIjoidUNycWRCVjZtSkd0NW81NGX0=&amp;quot;. Im Folgenden möge die Zeichenkette mit &amp;lt;Schluessel&amp;gt; bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Authentifizierungsschlüssel kann man nun auf Grafana zugreifen. Beispielsweise möchte man ein dashboard, das mehrere Temperaturen enthält, rendern. Dazu benötigt man nun die Zugriffsadresse dieses Dashboards. Man klickt auf die Überschrift des Boards und wählt &amp;quot;Share&amp;quot; aus. Es erscheint ein Share Panel, so wie im Screenshot angezeigt.&lt;br /&gt;
[[Datei:GrafanaSharePanel.png|200px|thumb|right|Grafana Share Panel]] &lt;br /&gt;
Unten im Panel ist ein Link mit den Worten &amp;quot;Direct link rendered image&amp;quot; zu sehen. Diesen Link notiert man. Im folgenden möge der Link mit &amp;lt;Link&amp;gt; bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Auf der Shell-Ebene würde nun der folgende Befehl das Dashboard rendern und speichern&lt;br /&gt;
 curl -H &amp;quot;Authorization: Bearer &amp;lt;Schluessel&amp;gt;&amp;quot; &amp;quot;&amp;lt;Link&amp;gt;&amp;quot;  &amp;lt;Dateiname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da in der neuen Grafana-Version das Rendern &#039;&#039;auf einem Raspberry Pi&#039;&#039; nicht ohne Weiteres unterstützt wird, kann es sein, dass die oben genannten Versuche fehlschlagen. Hier bietet sich eine andere Lösung an, die zwar nicht so elegant wie die obige ist, aber dafür funktioniert: Man installiert Firefox auf dem Raspberry und lässt ihn &amp;quot;headless&amp;quot; einen Screenshot erstellen. Dieses kann man dann weiterverarbeiten. Diese Lösung hat den Nachteil, dass dann nur die Auflösung des Raspberry erreicht wird. Dazu sind folgende Schritte noztwendig. Zuerst Firefox installieren&lt;br /&gt;
  sudo apt install firefox-esr&lt;br /&gt;
danach ein neues Profil in Firefox erstellen (sonst stürzt Firefox ab), das ist sehr umständlich: Auf Hilfe gehen, dann steht dort irgendwo &amp;quot;install new profile&amp;quot; und dieses Profil beispielsweise headless_profil nennen und zuletzt kann dann endlich mit einem Terminal-Befehl ein Screenshot erstellt werden&lt;br /&gt;
 /pfad/zu/firefox -P headless_profile -headless --screenshot &amp;lt;hier die www-Adresse der Webseite angeben&amp;gt;&lt;br /&gt;
Mehr dazu auf [https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Headless_mode dieser Webseite]&lt;br /&gt;
&lt;br /&gt;
==== Zweiter Schritt: Senden mit Telegram ====&lt;br /&gt;
Im zweiten Schritt soll nun die Datei gesendet werden. Dazu kann man etwa den [[TelegramBot|Telegram-Bot]] verwenden. Der Sendebefehl lautet&lt;br /&gt;
 set &amp;lt;TelegramBotDevice-Name&amp;gt; sendImage &amp;lt;Dateiname&amp;gt;&lt;br /&gt;
Dabei ist der Dateiname des Bild (png-Format) anzugeben.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38309</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38309"/>
		<updated>2023-04-16T17:28:26Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Raspi-Alternative x64-ThinClient integrieren [2023] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so [[raspi docker-compose.yml]]&amp;lt;nowiki/&amp;gt;aus:&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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.&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#[[futro-docker-compose.yml]] mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
#den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
#Log-DB neuaufsetzen,&lt;br /&gt;
#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 &amp;amp;&amp;amp; sudo modprobe  pl2303.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38308</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38308"/>
		<updated>2023-04-15T16:56:21Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Raspi-Alternative x64-ThinClient integrieren [2023] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so [[raspi docker-compose.yml]]&amp;lt;nowiki/&amp;gt;aus:&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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 per Dosbox oder für Windows für Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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.&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#[[futro-docker-compose.yml]] mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
#den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
#Log-DB neuaufsetzen,&lt;br /&gt;
#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 &amp;amp;&amp;amp; sudo modprobe  pl2303.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38307</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38307"/>
		<updated>2023-04-15T12:46:14Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Multicast-Empfang mit Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so [[raspi docker-compose.yml]]&amp;lt;nowiki/&amp;gt;aus: &lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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 per Dosbox oder für Windows für Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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,&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#[[futro-docker-compose.yml]] mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
#den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
#Log-DB neuaufsetzen,&lt;br /&gt;
#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 &amp;amp;&amp;amp; sudo modprobe  pl2303.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspi_docker-compose.yml&amp;diff=38306</id>
		<title>Raspi docker-compose.yml</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspi_docker-compose.yml&amp;diff=38306"/>
		<updated>2023-04-15T12:44:53Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;version: &#039;3&#039;&lt;br /&gt;
services:&lt;br /&gt;
   fhem:&lt;br /&gt;
       image: fhem/fhem:latest&lt;br /&gt;
       #restart: always&lt;br /&gt;
       restart: unless-stopped&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;8083:8083&amp;quot;&lt;br /&gt;
           - &amp;quot;7072:7072&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./fhem/core/:/opt/fhem/&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.1&lt;br /&gt;
       devices:&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&lt;br /&gt;
       environment:&lt;br /&gt;
           FHEM_UID: 1000&lt;br /&gt;
           FHEM_GID: 1000&lt;br /&gt;
           TIMEOUT: 10&lt;br /&gt;
           RESTART: 1&lt;br /&gt;
           TELNETPORT: 7072&lt;br /&gt;
           TZ: Europe/Berlin&lt;br /&gt;
       depends_on:&lt;br /&gt;
           - &amp;quot;mysql&amp;quot;&lt;br /&gt;
           - &amp;quot;mqtt&amp;quot;&lt;br /&gt;
   habridge:&lt;br /&gt;
       restart: always&lt;br /&gt;
       image: habridge/ha-bridge-raspberrypi3&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./habridge/data/:/ha-bridge/data&lt;br /&gt;
           - /etc/localtime:/etc/localtime:ro&lt;br /&gt;
           - /etc/timezone:/etc/timezone:ro&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.2&lt;br /&gt;
#    homebridge:&lt;br /&gt;
#        restart: always&lt;br /&gt;
#        image: oznu/homebridge:raspberry-pi&lt;br /&gt;
#        volumes:&lt;br /&gt;
#            - ./homebridge:/homebridge&lt;br /&gt;
#        environment:&lt;br /&gt;
#            - TZ=Europe/Berlin&lt;br /&gt;
#            - PGID=1000&lt;br /&gt;
#            - PUID=1000&lt;br /&gt;
#            - HOMEBRIDGE_CONFIG_UI=1&lt;br /&gt;
#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&lt;br /&gt;
#        #network_mode: host&lt;br /&gt;
#        networks:&lt;br /&gt;
#            default:&lt;br /&gt;
#                ipv4_address: 192.168.31.3&lt;br /&gt;
#        depends_on:&lt;br /&gt;
#            - &amp;quot;fhem&amp;quot;&lt;br /&gt;
   mysql:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;3306&amp;quot;&lt;br /&gt;
           - &amp;quot;33060&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
           - &amp;quot;33060:33060&amp;quot;&lt;br /&gt;
       image: hypriot/rpi-mysql&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&lt;br /&gt;
           - ./mysql/data:/var/lib/mysql&lt;br /&gt;
       environment:&lt;br /&gt;
           - MYSQL_ROOT_PASSWORD=xxx&lt;br /&gt;
           - MYSQL_DATABASE=fhem&lt;br /&gt;
           - MYSQL_USER=fhemuser&lt;br /&gt;
           - MYSQL_PASSWORD=xxx&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.4&lt;br /&gt;
   mqtt:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;1883&amp;quot;&lt;br /&gt;
           - &amp;quot;9001&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;1883:1883&amp;quot;&lt;br /&gt;
           - &amp;quot;9001:9001&amp;quot;&lt;br /&gt;
       image: pascaldevink/rpi-mosquitto&lt;br /&gt;
       networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.31.5&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./mqtt/config/:/mqtt/config/&lt;br /&gt;
           - ./mqtt/log/:/mqtt/log/&lt;br /&gt;
           - ./mqtt/data/:/mqtt/data/&lt;br /&gt;
   nodered:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;1880&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;1880:1880&amp;quot;&lt;br /&gt;
       image: elzekool/rpi-nodered&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./nodered/data/:/root/.node-red/&lt;br /&gt;
       networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.31.6&lt;br /&gt;
       depends_on:&lt;br /&gt;
           - &amp;quot;mqtt&amp;quot;&lt;br /&gt;
networks:&lt;br /&gt;
   default:&lt;br /&gt;
       external:&lt;br /&gt;
           name: mymacvlannetwork&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspi_docker-compose.yml&amp;diff=38305</id>
		<title>Raspi docker-compose.yml</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspi_docker-compose.yml&amp;diff=38305"/>
		<updated>2023-04-15T12:44:02Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Raspi docker-compose.yml&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;version: &#039;3&#039;&lt;br /&gt;
services:&lt;br /&gt;
   fhem:&lt;br /&gt;
       image: fhem/fhem:latest&lt;br /&gt;
       #restart: always&lt;br /&gt;
       restart: unless-stopped&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;8083:8083&amp;quot;&lt;br /&gt;
           - &amp;quot;7072:7072&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./fhem/core/:/opt/fhem/&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.1&lt;br /&gt;
       devices:&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&lt;br /&gt;
       environment:&lt;br /&gt;
           FHEM_UID: 1000&lt;br /&gt;
           FHEM_GID: 1000&lt;br /&gt;
           TIMEOUT: 10&lt;br /&gt;
           RESTART: 1&lt;br /&gt;
           TELNETPORT: 7072&lt;br /&gt;
           TZ: Europe/Berlin&lt;br /&gt;
       depends_on:&lt;br /&gt;
           - &amp;quot;mysql&amp;quot;&lt;br /&gt;
           - &amp;quot;mqtt&amp;quot;&lt;br /&gt;
   habridge:&lt;br /&gt;
       restart: always&lt;br /&gt;
       image: habridge/ha-bridge-raspberrypi3&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./habridge/data/:/ha-bridge/data&lt;br /&gt;
           - /etc/localtime:/etc/localtime:ro&lt;br /&gt;
           - /etc/timezone:/etc/timezone:ro&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.2&lt;br /&gt;
#    homebridge:&lt;br /&gt;
#        restart: always&lt;br /&gt;
#        image: oznu/homebridge:raspberry-pi&lt;br /&gt;
#        volumes:&lt;br /&gt;
#            - ./homebridge:/homebridge&lt;br /&gt;
#        environment:&lt;br /&gt;
#            - TZ=Europe/Berlin&lt;br /&gt;
#            - PGID=1000&lt;br /&gt;
#            - PUID=1000&lt;br /&gt;
#            - HOMEBRIDGE_CONFIG_UI=1&lt;br /&gt;
#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&lt;br /&gt;
#        #network_mode: host&lt;br /&gt;
#        networks:&lt;br /&gt;
#            default:&lt;br /&gt;
#                ipv4_address: 192.168.31.3&lt;br /&gt;
#        depends_on:&lt;br /&gt;
#            - &amp;quot;fhem&amp;quot;&lt;br /&gt;
   mysql:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;3306&amp;quot;&lt;br /&gt;
           - &amp;quot;33060&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
           - &amp;quot;33060:33060&amp;quot;&lt;br /&gt;
       image: hypriot/rpi-mysql&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&lt;br /&gt;
           - ./mysql/data:/var/lib/mysql&lt;br /&gt;
       environment:&lt;br /&gt;
           - MYSQL_ROOT_PASSWORD=xxx&lt;br /&gt;
           - MYSQL_DATABASE=fhem&lt;br /&gt;
           - MYSQL_USER=fhemuser&lt;br /&gt;
           - MYSQL_PASSWORD=xxx&lt;br /&gt;
       networks:&lt;br /&gt;
           default:&lt;br /&gt;
               ipv4_address: 192.168.31.4&lt;br /&gt;
   mqtt:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;1883&amp;quot;&lt;br /&gt;
           - &amp;quot;9001&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;1883:1883&amp;quot;&lt;br /&gt;
           - &amp;quot;9001:9001&amp;quot;&lt;br /&gt;
       image: pascaldevink/rpi-mosquitto&lt;br /&gt;
       networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.31.5&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./mqtt/config/:/mqtt/config/&lt;br /&gt;
           - ./mqtt/log/:/mqtt/log/&lt;br /&gt;
           - ./mqtt/data/:/mqtt/data/&lt;br /&gt;
   nodered:&lt;br /&gt;
       restart: always&lt;br /&gt;
       expose:&lt;br /&gt;
           - &amp;quot;1880&amp;quot;&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;1880:1880&amp;quot;&lt;br /&gt;
       image: elzekool/rpi-nodered&lt;br /&gt;
       volumes:&lt;br /&gt;
           - ./nodered/data/:/root/.node-red/&lt;br /&gt;
       networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.31.6&lt;br /&gt;
       depends_on:&lt;br /&gt;
           - &amp;quot;mqtt&amp;quot;&lt;br /&gt;
networks:&lt;br /&gt;
   default:&lt;br /&gt;
       external:&lt;br /&gt;
           name: mymacvlannetwork&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38304</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38304"/>
		<updated>2023-04-15T12:35:25Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Raspi-Alternative x64-ThinClient Futro S740 integrieren [2023] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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 per Dosbox oder für Windows für Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# [https://wiki.ubuntuusers.de/Wine/ wine] nach Anleitung installieren  inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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,&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren,&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5,&lt;br /&gt;
# Docker installieren,&lt;br /&gt;
# Docker compose installieren,&lt;br /&gt;
# Multicast für SMA-Geräte,&lt;br /&gt;
## &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs 192.168.1.1 bis 192.168.1.31 im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#[[futro-docker-compose.yml]] mit für die abweichende Hardware nötigen Änderungen,&lt;br /&gt;
#den [https://github.com/klein0r/fhem-style-haus-automatisierung FHEM-Skin entstauben],&lt;br /&gt;
#Log-DB neuaufsetzen,&lt;br /&gt;
#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 &amp;amp;&amp;amp; sudo modprobe  pl2303.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
Der Thin Client Fujitsu Futro S740 fühlt sich mit meiner Installation deutlich schneller als ein Raspi4 an.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38303</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38303"/>
		<updated>2023-04-15T12:19:01Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Raspi-Alternative x64-ThinClient integrieren [2023] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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 per Dosbox oder für Windows für Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# wine nach Anleitung installieren &amp;lt;nowiki&amp;gt;https://wiki.ubuntuusers.de/Wine/&amp;lt;/nowiki&amp;gt; inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# [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&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5&lt;br /&gt;
# Docker installieren&lt;br /&gt;
# Docker compose installieren&lt;br /&gt;
# &amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#[[futro-docker-compose.yml]]&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Futro-docker-compose.yml&amp;diff=38302</id>
		<title>Futro-docker-compose.yml</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Futro-docker-compose.yml&amp;diff=38302"/>
		<updated>2023-04-15T12:18:09Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: FHEM + Multicast + ttyUSB docker-compose.yml&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;version: &#039;2&#039;&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
    fhem:&lt;br /&gt;
        restart: always&lt;br /&gt;
        ports:&lt;br /&gt;
            - &amp;quot;8083:8083&amp;quot;&lt;br /&gt;
            - &amp;quot;7072:7072&amp;quot;&lt;br /&gt;
        image: fhem/fhem:latest&lt;br /&gt;
        volumes:&lt;br /&gt;
            - ./fhem/core/:/opt/fhem/&lt;br /&gt;
        networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.29.1&lt;br /&gt;
        devices:&lt;br /&gt;
          #   - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&lt;br /&gt;
            - &amp;quot;/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0:/dev/ttyS5&amp;quot;&lt;br /&gt;
            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&lt;br /&gt;
            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&lt;br /&gt;
            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&lt;br /&gt;
        environment:&lt;br /&gt;
            FHEM_UID: 1000&lt;br /&gt;
            FHEM_GID: 1000&lt;br /&gt;
            TIMEOUT: 10&lt;br /&gt;
            RESTART: 1&lt;br /&gt;
            TELNETPORT: 7072&lt;br /&gt;
            TZ: Europe/Berlin&lt;br /&gt;
        depends_on:&lt;br /&gt;
            - &amp;quot;mysql&amp;quot;&lt;br /&gt;
            - &amp;quot;mqtt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    mysql:&lt;br /&gt;
        restart: always&lt;br /&gt;
        expose:&lt;br /&gt;
            - &amp;quot;3306&amp;quot;&lt;br /&gt;
            - &amp;quot;33060&amp;quot;&lt;br /&gt;
        ports:&lt;br /&gt;
            - &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
            - &amp;quot;33060:33060&amp;quot;&lt;br /&gt;
        image: mysql/mysql-server:5.7&lt;br /&gt;
        volumes:&lt;br /&gt;
            - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&lt;br /&gt;
            - ./mysql/data:/var/lib/mysql&lt;br /&gt;
        environment:&lt;br /&gt;
            - MYSQL_DATABASE=fhem&lt;br /&gt;
            - MYSQL_USER=fhemuser&lt;br /&gt;
            - MYSQL_PASSWORD=2jRHkcdw3WuNSQAcX7&lt;br /&gt;
            - MYSQL_ROOT_PASSWORD=KQW8jcxkjr4CpSMaz&lt;br /&gt;
            - MYSQL_RANDOM_ROOT_PASSWORD=false&lt;br /&gt;
            - MYSQL_ONETIME_PASSWORD=false&lt;br /&gt;
        networks:&lt;br /&gt;
            default:&lt;br /&gt;
                ipv4_address: 192.168.1.4&lt;br /&gt;
&lt;br /&gt;
    mqtt:&lt;br /&gt;
        restart: always&lt;br /&gt;
        expose:&lt;br /&gt;
            - &amp;quot;1883&amp;quot;&lt;br /&gt;
            - &amp;quot;9001&amp;quot;&lt;br /&gt;
        ports:&lt;br /&gt;
            - &amp;quot;1883:1883&amp;quot;&lt;br /&gt;
            - &amp;quot;9001:9001&amp;quot;&lt;br /&gt;
        image: eclipse-mosquitto:2.0.15&lt;br /&gt;
        networks:&lt;br /&gt;
             default:&lt;br /&gt;
                 ipv4_address: 192.168.1.5&lt;br /&gt;
        volumes:&lt;br /&gt;
            - ./mqtt/config/:/mosquitto/config/&lt;br /&gt;
            - ./mqtt/log/:/mosquitto/log/&lt;br /&gt;
            - ./mqtt/data/:/mosquitto/data/&lt;br /&gt;
networks:&lt;br /&gt;
    default:&lt;br /&gt;
        external:&lt;br /&gt;
            name: mymacvlannetwork&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38301</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38301"/>
		<updated>2023-04-15T12:07:45Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: X64 kompatible Hardware ersetzt Raspi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Raspi-Alternative x64-ThinClient integrieren [2023] ====&lt;br /&gt;
Auf Raspis läuft viele Software, aber keine Programmiersoftware für Simatic S5. Ein Artikel in &lt;br /&gt;
&lt;br /&gt;
[https://www.heise.de/select/ct/2023/6/2301013201757655367 c&#039;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 per Dosbox oder für Windows für Wine besser integriert werden, indem sie direkt auf dem FHEM-Server läuft. Folgende Konfigurationsschritte bin ich gegangen:&lt;br /&gt;
&lt;br /&gt;
# LUbuntu LTS vom Stick installieren,&lt;br /&gt;
# XRDP nach Anleitung installieren -&amp;gt; Zugriff mit Remmina-Client variable Auflösung,&lt;br /&gt;
# wine nach Anleitung installieren &amp;lt;nowiki&amp;gt;https://wiki.ubuntuusers.de/Wine/&amp;lt;/nowiki&amp;gt; inklusive Prefix für 32 bit,&lt;br /&gt;
# [https://linuxconfig.org/configuring-wine-with-winetricks winetricks] installiert + winetricks corefonts ausgeführt, für passende Schriftarten,&lt;br /&gt;
# wine regedit benutzt, um COM1 mit /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 zu verbinden&lt;br /&gt;
# Programmiersoftware vom Datenträger installieren&lt;br /&gt;
# Erfolgskontrolle: Programmiersoftware läuft auf FHEM-Server und hat Zugriff auf die S5&lt;br /&gt;
# Docker installieren&lt;br /&gt;
# Docker compose installieren&lt;br /&gt;
# &amp;lt;code&amp;gt;docker network create -d macvlan -o parent=eno1 --subnet=192.168.29.0/24 --gateway=192.168.29.254 --ip-range=192.168.29.0/27 mymacvlannetwork&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.fhem.de/index.php?topic=114284.0&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;IPs im Router reserviert und vom DHCP ausgeschlossen&amp;lt;/code&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38240</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=38240"/>
		<updated>2023-03-31T10:10:36Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Alte Konfiguration in den neuen Container übernehmen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=MQTT_GENERIC_BRIDGE&amp;diff=37461</id>
		<title>MQTT GENERIC BRIDGE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=MQTT_GENERIC_BRIDGE&amp;diff=37461"/>
		<updated>2022-05-31T14:59:38Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Stellt für beliebige Geräte eine Schnittstellt zum MQTT-Protokoll zur Verfügung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=MQTT_GENERIC_BRIDGE&lt;br /&gt;
|ModForumArea=MQTT&lt;br /&gt;
|ModTechName=10_MQTT_GENERIC_BRIDGE.pm&lt;br /&gt;
|ModOwner=hexenmeister ({{Link2FU|4065|Forum}}) }}&lt;br /&gt;
&lt;br /&gt;
{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
Das Modul &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; stellt eine zentrale Schnittstelle zum MQTT-Protokoll für beliebig viele andere FHEM-Geräte bereit. Es wird für eine FHEM-Installation jeweils nur ein erreichbarer MQTT-Server sowie eine Instanz der &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; benötigt. Es ist aber auch möglich, mehrere Server parallel zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Dieses Modul kann seit November 2018 mit allen drei IO-Modul-Varianten zusammen eingesetzt werden, also sowohl mit {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} bzw. [[MQTT2_CLIENT]] oder [[MQTT (Modul)|MQTT]](00_MQTT.pm), und seit Rev. 23514 (Jan. 2021) wird für &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; iVm. den MQTT2-IO-Modulen keine zusätzliche Software mehr benötigt. &lt;br /&gt;
&lt;br /&gt;
Dabei erfolgt an dem zentralen &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039;-Gerät selbst nur eine Basiskonfiguration, die Standardwerte für alle anzubindenden Geräte bereitstellt, alle übrigen Einstellungen erfolgen durch Attribute an dem jeweiligs anzubindenden Gerät selbst. &lt;br /&gt;
&lt;br /&gt;
Beispiel: ein Aktor des Typs [[HomeMatic|CUL_HM]] kann über MQTT-Kommandos an den für ihn passenden Topic an- oder ausgeschaltet werden oder auch einfach nur seinen aktuellen Schaltzustand per MQTT-Protokoll publizieren.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Vorbereitung===&lt;br /&gt;
Im folgenden wird als MQTT-Server &#039;&#039;mosquitto&#039;&#039; verwendet, der in aktuellen Linux-Distributionen über die Paketverwaltung angeboten wird. Hier die Installation für Raspberry Pi OS: &lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
 sudo apt-get install mosquitto&lt;br /&gt;
&lt;br /&gt;
Es kann aber auch ein bereits vorhandener {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===Grundsätzliche Konfiguration===&lt;br /&gt;
Definition der Schnittstelle zum MQTT-Server (hier: auf demselben Raspberry):&lt;br /&gt;
&lt;br /&gt;
 defmod mqtt_io MQTT2_CLIENT 127.0.0.1:1883&lt;br /&gt;
 attr mqtt_io alias MQTT Broker&lt;br /&gt;
 attr mqtt_io devStateIcon .*active:none:disconnect .*disconnected:none:connect&lt;br /&gt;
 attr mqtt_io group MQTT&lt;br /&gt;
 attr mqtt_io icon mqtt&lt;br /&gt;
 attr mqtt_io room IO_Devices&lt;br /&gt;
&lt;br /&gt;
Wer möchte, kann den Status des FHEM-Servers per MQTT LWT mitteilen:&lt;br /&gt;
&lt;br /&gt;
Für MQTT2_CLIENT:&lt;br /&gt;
 attr mqtt_io lwt system/&amp;lt;fhem-name&amp;gt;/connection/status connection lost&lt;br /&gt;
 attr mqtt_io lwtRetain 1&lt;br /&gt;
 attr mqtt_io msgAfterConnect -r system/&amp;lt;fhem-name&amp;gt;/connection/status connected&lt;br /&gt;
 attr mqtt_io msgBeforeDisconnect -r system/&amp;lt;fhem-name&amp;gt;/connection/status disconnected&lt;br /&gt;
&lt;br /&gt;
Alternativ: für [[MQTT (Modul)|MQTT]]&lt;br /&gt;
 attr mqtt last-will retain:1 system/&amp;lt;fhem-name&amp;gt;/connection/status connection lost&lt;br /&gt;
 attr mqtt on-connect retain:1 {Log3(&amp;quot;mqtt&amp;quot;,3,&amp;quot;connected to MQTT server&amp;quot;);;1} system/&amp;lt;fhem-name&amp;gt;/connection/status connected&lt;br /&gt;
 attr mqtt on-disconnect retain:1 {Log3(&amp;quot;mqtt&amp;quot;,3,&amp;quot;disconnected from MQTT server&amp;quot;);;1} system/&amp;lt;fhem-name&amp;gt;/connection/status disconnected&lt;br /&gt;
&lt;br /&gt;
===Definition der Generic Bridge===&lt;br /&gt;
Der Name &#039;&#039;mqttGenericBridge&#039;&#039; kann dabei frei gewählt werden:&lt;br /&gt;
 defmod mqttGenericBridge MQTT_GENERIC_BRIDGE&lt;br /&gt;
 attr mqttGenericBridge IODev mqtt_io&lt;br /&gt;
 attr mqttGenericBridge alias MQTT generic bridge&lt;br /&gt;
 attr mqttGenericBridge group MQTT&lt;br /&gt;
 attr mqttGenericBridge room IO_Devices&lt;br /&gt;
 attr mqttGenericBridge stateFormat dev: device-count in: incoming-count out: outgoing-count&lt;br /&gt;
&lt;br /&gt;
Damit sind die wesentlichen Vorarbeiten abgeschlossen, und die &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; kann bereits dafür genutzt werden, beliebige Reading- oder Attribut-Änderungen von FHEM-Devices über MQTT zu publishen oder entsprechende Anweisungen umzusetzen. Es wird jedoch empfohlen, zunächst noch einige grundlegende Einstellungen vorzunehmen. Hierfür - sowie dann auch für die Konfiguration der weiteren Devices, die an MQTT angebunden werden sollen, steht als Hilfsmittel [[attrTemplate]] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
===Basisangaben in der MQTT_GENERIC_BRIDGE selbst===&lt;br /&gt;
[[Datei:MGB attrTemplate Base.PNG|400px|thumb|attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE]]Zunächst werden die Basisangaben zur Struktur der zu verwendenden MQTT-Topics sowie - bei Verwendung eines MQTT2-Interface-Moduls - die &#039;&#039;clientOrder&#039;&#039; konfiguriert:&lt;br /&gt;
 set mqttGenericBridge attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE&lt;br /&gt;
Dies kann direkt über die Detailansicht des Geräts mqttGenericBridge erfolgen, siehe der nebenstehende screenshot, aus dem auch zu entnehmen ist, was das attrTemplate an Änderungen der Konfiguration vornehmen wird. Dies sind zwei Aspekte:&lt;br /&gt;
Zum einen wird eine Variable namens $base in Sende- und in Empfangsrichtung festgelegt. In Senderichtung (pub:) besteht diese nur aus dem Namen der &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039;, in Empfangsrichtung (sub:) aus dem Namen sowie dem Topic-Anteil &#039;&#039;set&#039;&#039;. Diese Angaben können im Prinzip beliebig geändert werden, es muss lediglich darauf geachtet werden, dass die Angaben unterschiedlich sind, sonst kann es zu unbeabsichtigten Schleifen kommen!&lt;br /&gt;
[[Datei:MGB attrTemplate Base M2IO options.PNG|400px|thumb|attrTemplate Anfrage der gewünschten Konfigurationsoption]]Zum anderen wird - sofern ein  &#039;&#039;MQTT2_CLIENT&#039;&#039; und &#039;&#039;MQTT2_SERVER&#039;&#039; als Interface verwendet wird - je nach Wahl des Nutzers in dem dann erscheinenden Dialogfeld - die clientOrder festgelegt. Wer hier unschlüssig ist, sollte die empfohlene Variante wählen, um Probleme im Zusammenspiel mit der &#039;&#039;autocreate&#039;&#039;-Funktion dieser Interface-Typen möglichst zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In vielen [[Dokumentationsstruktur#Internet, Blogs usw.|im Internet zu findenden Anleitungen]] wird pauschal das Attribut &#039;&#039;globalPublish&#039;&#039; gesetzt. Dieses führt allerdings dazu, dass zum einen sehr viele unwichtige Daten (oder eben ggf. auch unbeabsichtigt: eigentlich besser geheim zu haltende Daten?) an den MQTT-Server übermittelt werden, und zum anderen eine aufwändige Nachbearbeitung auf der Gegenseite erforderlich werden kann. Daher wird hiervon &#039;&#039;&#039;ausdrücklich abgeraten!&#039;&#039;&#039; Stattdessen kann man relativ einfach über den attrTemplate-Mechanismus (nur) die Informationen über MQTT verfügbar machen, die in der Regel für externe Anwendungen auch benötigt werden.}}&lt;br /&gt;
&lt;br /&gt;
==Basics zur Konfiguration der anzubindenden Geräte==&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Auch wer plant, später die Kommandos mit einer ganz anderen Software zu versenden, sollte zunächst den Weg über die Linux-Konsole und die Tools &#039;&#039;mosquitto_sub&#039;&#039; und &#039;&#039;mosquitto_pub&#039;&#039; gehen. So läßt sich die Funktionalität von FHEM und der MQTT_GENERIC_BRIDGE zunächst ohne weitere Störeinflüsse prüfen und andere User können leichter helfen, falls Probleme auftreten sollten.}}&lt;br /&gt;
Um gezielt einzelne Werte zu senden und auch nur gewünschte Anweisungen zu erhalten, ist stattdessen eine auf das jeweilige Gerät angepasste Konfiguration der Schnittstelle zu empfehlen. Um die hier dargestellten Schritte und deren Wirksamkeit zu prüfen, sollte der Verkehr von und zum MQTT-Server beobachtet werden. Im Folgenden werden hierfür die Programme &#039;&#039;mosquitto_sub&#039;&#039; und &#039;&#039;mosquitto_pub&#039;&#039; aus dem Paket &#039;&#039;mosquitto-clients&#039;&#039; verwendet. Auf einem &#039;&#039;Raspberry Pi OS&#039;&#039; können diese mit &amp;lt;code&amp;gt;sudo apt-get install mosquitto-clients&amp;lt;/code&amp;gt; installiert werden. Beide Programme funktionieren auch mit einem MQTT2_SERVER.&lt;br /&gt;
&lt;br /&gt;
Den Verkehr auf der Linux-Konsole kann man mit &lt;br /&gt;
 mosquitto_sub -h 127.0.0.1 -i fhem-test -v -t mqttGenericBridge/# -t system/# &lt;br /&gt;
verfolgen, gegebenenfalls sind Username und Passwort zu ergänzen, falls die Einstellungen am Server dies erfordern (siehe &#039;&#039;manpage&#039;&#039; zu &#039;&#039;mosquitto_sub&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readingwerte publishen===&lt;br /&gt;
====mqttPublish====&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Der Name der Attribute kann abweichen, falls ein anderes &#039;&#039;MQTT-Präfix&#039;&#039; über das &#039;&#039;Define&#039;&#039; in der &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; gesetzt ist. Hier wird davon ausgegangen, dass dieses nicht geändert wurde.}}&lt;br /&gt;
&lt;br /&gt;
Um Reading-Werte von einem Gerät zu versenden, wird das Attribut &#039;&#039;mqttPublish&#039;&#039; verwendet. Im einfachsten Fall wird festgelegt, welche Readings versendet werden sollen, und unter welchem Topic. Für einen beliebigen Temperatursensor könnte dies z.B. so aussehen:&lt;br /&gt;
 attr mySensor mqttPublish temperature:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
In der Linux.Konsole, in der &#039;&#039;mosquitto_sub&#039;&#039; läuft, sollte jetzt bei jeder Aktualisierung des Sensor-Werts anzeigen, dass eine entsprechende Message an den MQTT-Server gesendet wurde. Dies geschieht [[Event|Event-basiert]], so dass sich hier ggf. auch insbesondere Einstellungen im Attribut [[Event-on-change-reading|event-on-change-reading]] auf die Häufigkeit der Aktualisierung auswirken.&lt;br /&gt;
&lt;br /&gt;
Es können auch mehrere Readings erfasst werden, für einen typischen kombinierten Temperatur- und Luftfeuchtigkeitssensor könnte dies z.B. so aussehen:&lt;br /&gt;
 attr mySensor mqttPublish temperature|humidity:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
oder auch so:&lt;br /&gt;
 attr mySensor mqttPublish temperature|humidity|battery:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Falls (!) erforderlich oder gewünscht, kann auch ein &#039;&#039;*&#039;&#039; als &#039;&#039;wildcard&#039;&#039; verwendet werden. Dann werden alle Readings gepublisht:&lt;br /&gt;
 attr mySensor mqttPublish *:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
====mqttAlias====&lt;br /&gt;
Verfolgt man den Verkehr eine Zeitlang, wird die Bedeutung der Variablen klarer: &#039;&#039;$base&#039;&#039; entspricht der Angabe aus den &#039;&#039;globalDefaults&#039;&#039; an der &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039;, &#039;&#039;$device&#039;&#039; wird durch den Namen des Geräts in FHEM erstetzt, und &#039;&#039;$name&#039;&#039; entspricht (noch) dem Namen des Readings. &lt;br /&gt;
Bis hierhin könnte man also auch statt einer MQTTT_GENERIC_BRIDGE problemlos ein [[notify]] verwenden, um die Events für direkte publish-Anweisungen am jeweiligen Interface-Modul (z.B. MQTT2_CLIENT) auszuwerten.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; bietet jedoch auch für das Publishen erweiterte Funktionalitäten an. Die erste: Z.B. kann der Parameter &#039;&#039;$name&#039;&#039; - etwa zur [[DevelopmentGuidelinesReadings|Standardisierung der Namensstruktur der Readings]] - mit Hilfe des Attributs &#039;&#039;mqttAlias&#039;&#039; verändert werden. Durch die folgende Einstellung würde z.B. ein &#039;&#039;battery&#039;&#039;-Wert unter dem Topic-Teil &#039;&#039;batteryPercent&#039;&#039; versendet und das Reading &#039;&#039;measured-temp&#039;&#039; unter &#039;&#039;temperature&#039;&#039;:&lt;br /&gt;
 attr mySensor mqttAlias battery=batteryPercent measured-temp=temperature&lt;br /&gt;
&lt;br /&gt;
====state====&lt;br /&gt;
Da das Reading &#039;&#039;state&#039;&#039; in FHEM in der Regel eine Art Hauptzustand eines Geräts beschreibt, wird für die weiter unten dargestellten &#039;&#039;attrTemplate&#039;&#039; dieses Reading kein &#039;&#039;$name&#039;&#039;-Anteil im Topic versendet. Ein einfaches &amp;quot;ein-aus&amp;quot;-Gerät kann man dieser Vorgabe folgend daher so konfigurieren:&lt;br /&gt;
 attr myRelay mqttPublish state:topic={&amp;quot;$base/$device&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Für ein dimmbares Licht (das als Reading &#039;&#039;pct&#039;&#039; kennt) kombiniert man beides:&lt;br /&gt;
 attr myDimmer mqttPublish state:topic={&amp;quot;$base/$device&amp;quot;} pct:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Und zu guter letzt noch als farbiges (mit Reading &#039;&#039;rgb&#039;&#039;) und dimmbares Licht:&lt;br /&gt;
 attr myRGBLight mqttPublish state:topic={&amp;quot;$base/$device&amp;quot;} pct|rgb:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
===Geräte steuern===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Kommt als MQTT-Server MQTT2_SERVER zum Einsatz, ist zwingend eine &#039;&#039;ClientID&#039;&#039; mit anzugeben, andernfalls werden die so generierten Messages eventuell nicht ausgewertet!}}Um Geräte über die MQTT-Schnittstelle bedienen zu können, wird zum einen eine Software benötigt, mit der man entsprechende publish-Anweisungen generieren kann. Dies kann z.B. das bereits genannte &#039;&#039;mosquitto_pub&#039;&#039; sein.&lt;br /&gt;
====mqttSubscribe====&lt;br /&gt;
Spiegelbildlich zum o.g. &#039;&#039;mqttPublish&#039;&#039;-Attribut wird über das jeweilige &#039;&#039;mqttSubscribe&#039;&#039;-Attribut festgelegt, welche Topics für das FHEM-Gerät ausgewertet werden sollen und welchen Readings diese zugeordnet sind. &lt;br /&gt;
Für ein einfaches &amp;quot;ein-aus&amp;quot;-Gerät verwendet man daher denselben Attributwert wie für das &#039;&#039;mqttPublish&#039;&#039;:&lt;br /&gt;
 attr myRelay mqttSubscribe state:stopic={&amp;quot;$base/$device&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Da wir oben in &#039;&#039;globalDefaults&#039;&#039; für &#039;&#039;sub:$base=mqttGenericBridge/set&#039;&#039; festgelegt haben, muss die Schaltanweisung allerdings an einen anderen Topic erfolgen als die Statusmeldung, die wir wegen des &#039;&#039;mqttPublish&#039;&#039;-Attributs erhalten - auf diese Weise können unbeabsichtigte Schleifen unterbunden werden.  &lt;br /&gt;
&lt;br /&gt;
Um jetzt mit &#039;&#039;mosquitto_pub&#039;&#039; eine passende Anweisung zu erzeugen, benötigen wir eine weitere (ssh-Linux-) Konsole, über die wir dann auf dem MQTT-Weg schalten können - vorausgesetzt, das Gerät &#039;&#039;myRelay&#039;&#039; kann den Befehl &amp;lt;code&amp;gt;set myRelay on&amp;lt;/code&amp;gt; (bzw. &#039;&#039;off&#039;&#039;) verarbeiten. Auch hier wären ggf. die Zugangsdaten entsprechend der &#039;&#039;manpage&#039;&#039; zu ergänzen:&lt;br /&gt;
 mosquitto_pub -h 127.0.0.1 -i fhem-test -t mqttGenericBridge/set/myRelay -m on&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;mosquitto_sub&#039;&#039; auf der Linux-Konsole sollte jetzt zunächst die Schaltanweisung (Topic mit &#039;&#039;set-Element&#039;&#039;) wie auch die Readingänderung am Device vermeldet werden.&lt;br /&gt;
&lt;br /&gt;
====Geräte mit mehreren Settern====&lt;br /&gt;
Das Prinzip dürfte jetzt klarer sein, also versuchen wir es direkt mit unserer farbigen Leuchte:&lt;br /&gt;
 attr myRGBLight mqttSubscribe state:stopic={&amp;quot;$base/$device&amp;quot;} pct|rgb:stopic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
Und schon sollte diese über &#039;&#039;msoquitto_pub&#039;&#039; bzw. MQTT schalt- und dimmbar sein und Farbänderungen entegennehmen - und natürlich den zugehörigen Status zurückmelden.&lt;br /&gt;
&lt;br /&gt;
====mqttAlias====&lt;br /&gt;
Auch bei den Supscriptions besteht die Möglichkeit, &#039;&#039;mqttAlias&#039;&#039; zu verwenden und die Namen über diesen Weg zu verändern. Dies kann insbesondere sinnvoll sein, um in externen Anwendungen dann (dort) dieselben Vorlagen nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
====topic, stopic und atopic====&lt;br /&gt;
In obigem Beispiel haben wir in &#039;&#039;mqttSubscribe&#039;&#039; das Schlüsselwort &#039;&#039;stopic&#039;&#039; (die Kurzform von &#039;&#039;set-topic&#039;&#039;) verwendet. Dieses bewirkt bei einer entsprechenden MQTT-Nachricht dasselbe wie der FHEM-Befehl &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;, also &amp;lt;code&amp;gt;set myRGBLight pct 70&amp;lt;/code&amp;gt;. Daneben gibt es die weiteren Schlüsselwörter &#039;&#039;topic&#039;&#039; und &#039;&#039;atopic&#039;&#039;. &lt;br /&gt;
* &#039;&#039;topic&#039;&#039; (Langform: readings-topic) entspicht einer &#039;&#039;setreading&#039;&#039;-Anweisung. Dabei wird dann lediglich der Readingwert aktualisiert, allerdings (falls Hardware gesteuert werden könnte) aber kein Schaltbefehl an die Hardware gesendet. In Installationen ohne MQTT2-Interface kann dies dazu genutzt werden, [[Dummy|dummy]]-Geräte ähnlich flexibel zu verwenden wie [[MQTT2_DEVICE]].&lt;br /&gt;
* &#039;&#039;atopic&#039;&#039; (Langform: attr-topic) schließlich dient dazu, Attributwerte zu ändern. &#039;&#039;atopic&#039;&#039; kann auch in &#039;&#039;mqttPublish&#039;&#039; eingesetzt werden, um Änderungen der Attribut-Werte an den MQTT-Server zu übermitteln.&lt;br /&gt;
&lt;br /&gt;
===Weitere Optionen===&lt;br /&gt;
&#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; bietet weitere Attribute, die im Zusammenspiel teils sehr umfassende weitere Möglichkeiten ergeben, Geräte an MQTT anzubinden. Einige der Möglichkeiten, insbesondere, über &#039;&#039;expression&#039;&#039; beliebigen Perl-Code zur Auswertung bzw. Strukturierung der Daten zu verwenden, sind in den Grundzügen weiter unten dargestellt. &lt;br /&gt;
&lt;br /&gt;
==Standardisierung via attrTemplate==&lt;br /&gt;
Insbesondere zur Anbindung externer Lösungen ist es jedoch häufig ausreichend, die Geräte-Daten in einer etwas strukturierten Weise aufzubereiten. Dies ist das Ziel der für &#039;&#039;MQTT_GENERIC_BRIDGE&#039;&#039; entwickelten &#039;&#039;attrTemplate&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
(tbc)&lt;br /&gt;
&lt;br /&gt;
==Konfigurationsmöglichkeiten für Fortgeschrittene==&lt;br /&gt;
&lt;br /&gt;
===expression===&lt;br /&gt;
&lt;br /&gt;
attr ZWave_THERMOSTAT_20 mqttGB1Alias reportedState=actuator&lt;br /&gt;
attr ZWave_THERMOSTAT_20 mqttGB1Publish desired-temp|temperature|reportedState:topic={&amp;quot;$base/$device/$name&amp;quot;} temperature:expression={$value=~m,(-?\d+(\.\d+)?),?::round($1,1):undef} reportedState:expression={$value=~m,dim.(\d+),?$1:undef}&lt;br /&gt;
attr ZWave_THERMOSTAT_20 mqttGB1Subscribe desired-temp:stopic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
===JSON===&lt;br /&gt;
json2nameValue() und toJSON() via expression &lt;br /&gt;
&lt;br /&gt;
===publishes an mehrere Topics===&lt;br /&gt;
&amp;quot;das Ausrufezeichen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Noch nachzubearbeiten, aus dem Thread Anwendungsfälle und Beispiele für MQTT_GENERIC_BRIDGE - https://forum.fhem.de/index.php/topic,91642.msg841367.html#msg841367)&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
eine Reading an einem beliebigen Device per MQTT setzen (für State-Reading soll state verwendet werden)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttSubscribe &amp;lt;reading-name&amp;gt;:topic=&amp;lt;topic&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(anstatt &#039;topic&#039; kann für eine bessere Lesbarkeit &#039;readings-topic&#039; verwendet werden)&lt;br /&gt;
&lt;br /&gt;
ein Set-Befehl an einem beliebigen Device mit dem per MQTT gesendeten Wert ausführen&lt;br /&gt;
(für set ohne namen (set on, set off) soll state verwendet werden)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttSubscribe &amp;lt;set-befehl&amp;gt;:stopic=&amp;lt;topic&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(anstatt &#039;stopic&#039; kann für eine bessere Lesbarkeit &#039;set-topic&#039; verwendet werden)&lt;br /&gt;
&lt;br /&gt;
ein Attribut an einem beliebigen Device per MQTT setzen&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttSubscribe &amp;lt;attribut-name&amp;gt;:atopic=&amp;lt;topic&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(anstatt &#039;atopic&#039; kann für eine bessere Lesbarkeit &#039;attr-topic&#039; verwendet werden)&lt;br /&gt;
&lt;br /&gt;
eine Änderung eines Readings per MQTT senen&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttPublish &amp;lt;readings-name&amp;gt;:topic=&amp;lt;topic&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
eine Änderung eines Attributes per MQTT senen&lt;br /&gt;
 attr &amp;lt;device-name&amp;gt; mqttPublish &amp;lt;attribut-name&amp;gt;:atopic=&amp;lt;topic&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verwendung von Variablen&lt;br /&gt;
Es können mit dem Attribute mqttDefaults Variablen definiert werden, die in mqttPublish und mqttSubscribe verwendet werden können:&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttDefaults base={&amp;quot;allgemeinerPfad/&amp;quot;}&lt;br /&gt;
...&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttPublish &amp;lt;reading-name&amp;gt;:topic={&amp;quot;$base/irgendEinName&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Weiterhin können in Topics folgende vordefinierte Variablen verwendet werden:&lt;br /&gt;
$reading - aktuell zu verarbeitende Reading&lt;br /&gt;
$device - aktulles Gerät&lt;br /&gt;
$name - Die Variable $name wird im Unterschied zu $reading ggf. ueber die in &#039;mqttAlias&#039; definierten Aliases beeinflusst. (s. Commandref für mqttAlias)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttPublish &amp;lt;reading-name&amp;gt;:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mehrere Readings auf einmal&lt;br /&gt;
Es können für einen Topic (sinnigerweise mit Variablen) auch mehrere Readings gleichzeitig angegeben werden. Diese müssen in diesem Fall durch ein | getrennt werden:&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttPublish &amp;lt;reading-name1&amp;gt;|&amp;lt;reading-name2&amp;gt;:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wildcards&lt;br /&gt;
mit einem * kann ein Topic für alle Readings zusammen definiert werden:&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;device-name&amp;gt; mqttPublish *:topic={&amp;quot;$base/$device/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Subscribe können in der Topic-Definition auch MQTT-Wildcards (+ und #) verwendet werden.&lt;br /&gt;
Falls der Reading-Name mit einem &#039;*&#039;-Zeichen am Anfang definiert wird, gilt dieser als &#039;Platzhalter&#039;. Der tatsaechliche Name der Reading (und ggf. des Geraetes) wird dabei durch Variablen aus dem Topic definiert ($reading, $name). Im Topic wirken diese Variablen als Wildcards, macht natuerlich nur Sinn, wenn Reading-Name auch nicht fest definiert ist (also faengt mit &#039;*&#039; an). &lt;br /&gt;
&lt;br /&gt;
-----------------&lt;br /&gt;
&lt;br /&gt;
Sensoren-Werte von einer FHEM-Instanz in eine andere übertragen&lt;br /&gt;
&lt;br /&gt;
Definition für ein HomeMatic-Device (Dirk&#039;s-Sensor + Verwendung von DevPoint-Modul):&lt;br /&gt;
(es werden gezielt bestimmte Werte übertragen)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
defmod &amp;lt;sensor-device-name&amp;gt; CUL_HM xxxxxx&lt;br /&gt;
attr &amp;lt;sensor-device-name&amp;gt; model HB-UW-Sen-THPL-I&lt;br /&gt;
...&lt;br /&gt;
attr &amp;lt;sensor-device-name&amp;gt; mqttDefaults base=haus/wohnzimmer&lt;br /&gt;
attr &amp;lt;sensor-device-name&amp;gt; mqttPublish humidity|luminosity|dewpoint|absoluteHumidity:topic={&amp;quot;$base/klima/$name&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Definition eines Empfänger-Dummy:&lt;br /&gt;
(es werden alle Werte bei passenden Topics empfangen)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
defmod &amp;lt;dummy-device-name&amp;gt; dummy&lt;br /&gt;
attr &amp;lt;dummy-device-name&amp;gt; readingList absoluteHumidity dewpoint humidity luminosity temperature vapourPressure&lt;br /&gt;
attr &amp;lt;dummy-device-name&amp;gt; mqttDefaults base=haus/wohnzimmer&lt;br /&gt;
attr &amp;lt;dummy-device-name&amp;gt; mqttSubscribe *:topic={&amp;quot;$base/klima/$reading&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
« Letzte Änderung: 11 Januar 2019, 21:31:38 von hexenmeister »&lt;br /&gt;
&lt;br /&gt;
-------------------------&lt;br /&gt;
&lt;br /&gt;
Aktoren, die in einer FHEM-Instanz definiert sind, aus einer anderen schalten&lt;br /&gt;
Switch&lt;br /&gt;
&lt;br /&gt;
Definition eines Schalters (EnOcean FSR14)&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
defmod &amp;lt;actor-device-name&amp;gt; EnOcean 0000000B&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; IODev FGW14&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; alias Licht&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; devStateIcon off:light_light_dim_00@gray on:light_light_dim_100@yellow .*:hourglass&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; eep A5-38-08&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; group Beleuchtung&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; gwCmd switching&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; icon light_downlight&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; manufID 00D&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttPublish state:topic=haus/wohnzimmer/licht/top/state&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttSubscribe state:stopic=haus/wohnzimmer/licht/top/set&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; room Wohnzimmer&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; subDef 0010000B&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; subType gateway&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; webCmd on:off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------&lt;br /&gt;
&lt;br /&gt;
Aktoren, die in einer FHEM-Instanz definiert sind, aus einer anderen schalten&lt;br /&gt;
Dimmer&lt;br /&gt;
&lt;br /&gt;
Aktor-Definition:&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
defmod &amp;lt;actor-device-name&amp;gt; CUL_HM xxxxxx&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; model HM-LC-Dim1TPBU-FM&lt;br /&gt;
...&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttPublish pct:topic=haus/wohnzimmer/licht/level state:topic=haus/wohnzimmer/licht/state&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttSubscribe pct:stopic=haus/wohnzimmer/licht/set&lt;br /&gt;
&lt;br /&gt;
------------------------&lt;br /&gt;
&lt;br /&gt;
Aktoren, die in einer FHEM-Instanz definiert sind, aus einer anderen schalten&lt;br /&gt;
Shutters / Blinds&lt;br /&gt;
&lt;br /&gt;
Aktor-Definition:&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
defmod &amp;lt;actor-device-name&amp;gt; CUL_HM xxxxxx&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; model HM-LC-Bl1PBU-FM&lt;br /&gt;
...&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttPublish pct:topic=haus/wohnzimmer/rollo/all/position state:topic=haus/wohnzimmer/rollo/all/state&lt;br /&gt;
attr &amp;lt;actor-device-name&amp;gt; mqttSubscribe pct:stopic=haus/wohnzimmer/rollo/all/set&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das ist so nicht vorgesehen, ein reading = ein Topic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a) beim device-count werden nur Geräte gezählt, die mit eigenen mqtt*-Attributen versehen sind. Bei einer globalen Definition &#039;globalPublish&#039; kann die Bridge nicht (ohne weiteres) wissen, welche Geräte angesprochen werden sollen. Daher wird auch nichts gezählt.&lt;br /&gt;
&lt;br /&gt;
b) mqttSubscribe ist gedacht für diejenigen Geräte, die per MQTT &#039;versorgt&#039; werden sollen. Die Bridge selbst gehört nicht dazu. Aus technischen Gründen kann es sein, dass diese Attribute trotzdem vom FHEM angeboten werden, gesetzt werden können sie jedoch nicht, die Bridge  &#039;währt&#039; sich dagegen.&lt;br /&gt;
Ein &#039;globalSubscribe&#039; gibt es nicht. Ich habe mich entschieden, diese Festure nicht anzubieten. Bei unbedachten Verwendung könnte ein großes Sicherheitsrisiko entstehen. Einfach diese Attribute an den gewünschgten Devices erstellen.&lt;br /&gt;
&lt;br /&gt;
Die Definition lautet &#039;fhem room=MQTT_BRIDGE_DEVICES&#039;. Der erste Parameter (wie im Commandref steht) ist der Prefix für die Optionsattribute. Ist für Sonderfälle gedacht, wenn mehr als eine Bridge im System vorhanen ist. Deine Parameter heißen also &#039;fhemSubscribe&#039; etc.&lt;br /&gt;
&lt;br /&gt;
Bin nun draufgekommen das dieses fehlerhafte Verhalten (Bridge geht nicht nach restart so lange bis man im User Interface DEF und &amp;quot;modify&amp;quot; geklickt hat)  nur dann auftritt wenn device-count = 0 ist.  Nun hab ich ein Device mit einem &amp;quot;fhemSubscribe&amp;quot; Attribut ausgestattet ... und nun lebt die Bridge auch nach einem Restart. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Du kannst aber mit * alle Readings greifen und dann mit Perlmitteln in der expression filtern.&lt;br /&gt;
&lt;br /&gt;
irgendwie so (ungetestet):&lt;br /&gt;
Code: [Auswählen]&lt;br /&gt;
&lt;br /&gt;
desired-temp!info:expression={if($reading=~/SMAEM12345678.*/){$value}else{undef})}&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36955</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36955"/>
		<updated>2022-01-04T20:59:18Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Vorbereitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Vorbereitung ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36952</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36952"/>
		<updated>2022-01-04T16:46:38Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Multicast-Empfang mit Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|mini|Auf dem Bus onewire1 gefundene Sensoren|alternativtext=|ohne]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36950</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36950"/>
		<updated>2022-01-04T16:37:58Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: Multicast im Container ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;.            &lt;br /&gt;
&lt;br /&gt;
==== Multicast-Empfang mit Docker ====&lt;br /&gt;
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 im [https://forum.fhem.de/index.php?topic=114284.0 Forum eine Lösung vorgeschlagen], die ich hier realisiert habe. Meine docker-compose.yml sieht dann so aus: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;version: &#039;3&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;services:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   fhem:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: fhem/fhem:latest&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       #restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: unless-stopped&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;8083:8083&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;7072:7072&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./fhem/core/:/opt/fhem/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_UID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           FHEM_GID: 1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TIMEOUT: 10&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           RESTART: 1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TELNETPORT: 7072&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           TZ: Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mysql&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   habridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: habridge/ha-bridge-raspberrypi3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./habridge/data/:/ha-bridge/data&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/localtime:/etc/localtime:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - /etc/timezone:/etc/timezone:ro&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.2&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#    homebridge:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        image: oznu/homebridge:raspberry-pi&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - ./homebridge:/homebridge&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - TZ=Europe/Berlin&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PGID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - PUID=1000&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI=1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - HOMEBRIDGE_CONFIG_UI_PORT=8081&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        #network_mode: host&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#                ipv4_address: 192.168.31.3&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#        depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;#            - &amp;quot;fhem&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mysql:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;3306:3306&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;33060:33060&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: hypriot/rpi-mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mysql/data:/var/lib/mysql&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       environment:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_ROOT_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_DATABASE=fhem&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_USER=fhemuser&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - MYSQL_PASSWORD=xxx&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;               ipv4_address: 192.168.31.4&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   mqtt:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1883:1883&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;9001:9001&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: pascaldevink/rpi-mosquitto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.5&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/config/:/mqtt/config/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/log/:/mqtt/log/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./mqtt/data/:/mqtt/data/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   nodered:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       restart: always&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       expose:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       ports:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;1880:1880&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       image: elzekool/rpi-nodered&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       volumes:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - ./nodered/data/:/root/.node-red/&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;            default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;                ipv4_address: 192.168.31.6&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       depends_on:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           - &amp;quot;mqtt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;   default:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;       external:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;           name: mymacvlannetwork&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das notwedinge Netz für die Hosts 1 bis 14 dafür habe ich so erzeugt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;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&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36912</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36912"/>
		<updated>2022-01-03T20:21:06Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2016]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2017]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2018]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36911</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36911"/>
		<updated>2022-01-03T20:18:24Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Anpassung von /home/pi/fhem-docker/docker-compose.yml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5 S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/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. &lt;br /&gt;
&lt;br /&gt;
Jetzt ist eine gute Zeit, die SD-Karte als Sicherheitskopie zu klonen. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36908</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36908"/>
		<updated>2022-01-03T15:09:01Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Vorbereitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/SVG-Plots_von_FileLog_auf_DbLog_umstellen Umstellung] auf das nun eingerichtete DBlog erfordert ein wenig Überlegung und manuelle Eingriffe. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36907</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36907"/>
		<updated>2022-01-03T15:06:55Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Alte Konfiguration in den neuen Container übernehmen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
Die [https://wiki.fhem.de/wiki/SVG-Plots_von_FileLog_auf_DbLog_umstellen Umstellung] auf das nun eingerichtete DBlog erfordert ein wenig Überlegung und manuelle Eingriffe. &lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36906</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36906"/>
		<updated>2022-01-03T14:58:16Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Serielle Schnittstellen anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da die Version von FHEM schon älter ist, Eingabe von &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in die FHEM-Kommandozeile im Browser.&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36897</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36897"/>
		<updated>2022-01-03T09:27:51Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Vorbereitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Keine Fehler auf der Konsole und im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36896</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36896"/>
		<updated>2022-01-03T08:57:30Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Vorbereitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte der Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR evaluating { DockerImageInfo_HealthCheck(); }: Undefined subroutine &amp;amp;main::DockerImageInfo_HealthCheck called at (eval 47) line 1.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
auftreten, hilft es in /home/pi/fhem-docker/fhem/core/fhem.cfg, nach einem vorherigen Backup dieser Datei, folgende Zeilen aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDIInfo DockerImageInfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo alias Docker Image Info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo devStateIcon ok:security@green Initialized:system_fhem_reboot@orange .*:message_attention@red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo group Update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo icon docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr myDIInfo room System&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36817</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36817"/>
		<updated>2022-01-01T17:57:44Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Docker mit Integration von Nodered, MQTT, IOBroker [2022] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36816</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36816"/>
		<updated>2022-01-01T17:56:35Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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 demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt ab 2012 chronologisch dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen [2012]==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen [2016]==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN [2017]===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker [2022] ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36815</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36815"/>
		<updated>2022-01-01T17:43:16Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Anpassung von /home/pi/fhem-docker/docker-compose.yml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
&lt;br /&gt;
==== Fazit ====&lt;br /&gt;
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.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36814</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36814"/>
		<updated>2022-01-01T17:35:01Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Serielle Schnittstellen anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für /dev/ttyAMA0 und die drei über USB angeschlossenen Onewire-Bus-Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivierung der Rules mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruppenzugehörigkeit ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentümer setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann die mitgelieferte docker-compose.yml (tippfehlerfrei) angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der docker-compose.yml, die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf der Pi-Konsole mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der neuen fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; funktionierte dann (fast) alles wie gewünscht und die S5 hat es ins Docker-Zeitalter geschafft ;-)&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36813</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36813"/>
		<updated>2022-01-01T17:24:10Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Vorbereitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich auf einem Ubuntu-PC so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für alle benötigen seriellen Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rechte setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann docker-compose.yml angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch _Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem shutdown restart funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36812</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36812"/>
		<updated>2022-01-01T17:22:39Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Anpassung von /home/pi/fhem-docker/docker-compose.yml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für alle benötigen seriellen Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rechte setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann docker-compose.yml angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch _Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &amp;lt;code&amp;gt;get onewire1 devices&amp;lt;/code&amp;gt; eine Liste der angeschlossenen OW-Geräte sichtbar sein: &lt;br /&gt;
[[Datei:OWX-Geräte-Liste.png|rand|links|mini|Auf dem Bus onewire1 gefundene Sensoren]]              &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==== Alte Konfiguration in den neuen Container übernehmen ====&lt;br /&gt;
Ich habe die Grundkonfiguration in der fhem.cfg des Containers unverändert übernommen und dann alle Zeilen unterhalb der Basiskonfigruation der alten fhem.cfg kopiert und in die neue unterhalb eingefügt. Nach einem shutdown restart funktionierte dann (fast) alles wie gewünscht.&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:OWX-Ger%C3%A4te-Liste.png&amp;diff=36811</id>
		<title>Datei:OWX-Geräte-Liste.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:OWX-Ger%C3%A4te-Liste.png&amp;diff=36811"/>
		<updated>2022-01-01T17:09:32Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OWX-Geräte-Liste&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36810</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36810"/>
		<updated>2022-01-01T17:07:04Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Serielle Schnittstellen anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich 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 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt weiter für alle benötigen seriellen Schnittstellen:&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pi-User zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER tty&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser $USER dialout&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rechte setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chmod g+r /dev/ttyAMA0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun unter anderem eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
==== Anpassung von /home/pi/fhem-docker/docker-compose.yml ====&lt;br /&gt;
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:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht bei mir so aus:   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0 -&amp;gt; ../../ttyUSB2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13  1. Jan 16:23 usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0 -&amp;gt; ../../ttyUSB3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend kann dann docker-compose.yml angepasst werden:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;code&amp;gt;networks:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           - fhem-network&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;       devices:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;         #  - &amp;quot;/dev/ttyUSB0:/dev/ttyUSB0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/ttyAMA0:/dev/ttyAMA0&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01XC9Y-if00-port0:/dev/onewire3&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E5-if00-port0:/dev/onewire2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;            - &amp;quot;/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_DAE003E6-if00-port0:/dev/onewire1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern die Container mit &amp;lt;code&amp;gt;docker-compose down&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt; neustarten.&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle mit &amp;lt;code&amp;gt;docker exec -it fhem-docker_fhem_1 /bin/bash&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; ls -l /dev&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  0 Jan  1 17:53 onewire1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  1 Jan  1 15:12 onewire2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;crw-rw---- 1 root tty  188,  2 Jan  1 16:26 onewire3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test der Schnittstellen in FHEM durch _Einfügen der Befehle in die Browser-Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myS5t S7 S5 /dev/ttyAMA0&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;connected&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define onewire3 OWX /dev/onewire3&amp;lt;/code&amp;gt; sollte im Webinterface zum state &#039;&#039;&#039;opened&#039;&#039;&#039; führen.&lt;br /&gt;
&lt;br /&gt;
Nach einiger Zeit sollte per &lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36808</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36808"/>
		<updated>2022-01-01T16:28:55Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Serielle Schnittstellen anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich im Container die seriellen Schnittstellen. Diese sind standardmäßig nicht dabei. Nach [https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3-4/ Anleitung] wird die /dev/ttyAMA0 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem # und speichern:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei mit unten stehendem Inhalt anlegen:  /etc/udev/rules.d/99-ttyAMA0.rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660”&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chgrp -h tty /dev/serial3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
Für OWX kann die feste Zuordnung mehrerer Onewire-Adapter über   &lt;br /&gt;
&lt;br /&gt;
== disable the serial console: sudo systemctl stop serial-getty@ttyS0.service &amp;amp;&amp;amp; sudo systemctl disable serial-getty@ttyS0.service ==&lt;br /&gt;
&lt;br /&gt;
== make sure you have pyserial installed if you&#039;re using the python serial library, not python-serial from apt. ==&lt;br /&gt;
&lt;br /&gt;
== create the following file /etc/udev/rules.d/ttyAMA0.rules: ==&lt;br /&gt;
&lt;br /&gt;
== KERNEL==“ttyUSB0”, SYMLINK+=“serial0” GROUP=“tty” MODE=“0660” ==&lt;br /&gt;
&lt;br /&gt;
== KERNEL==“ttyUSB1”, SYMLINK+=“serial1” GROUP=“tty” MODE=“0660” ==&lt;br /&gt;
&lt;br /&gt;
== KERNEL==“ttyUSB2”, SYMLINK+=“serial2” GROUP=“tty” MODE=“0660” ==&lt;br /&gt;
&lt;br /&gt;
== KERNEL==“ttyAMA0”, SYMLINK+=“serial3” GROUP=“tty” MODE=“0660” ==&lt;br /&gt;
&lt;br /&gt;
== and reload your udev rules: sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger ==&lt;br /&gt;
&lt;br /&gt;
== change the group of the new serial devices ==&lt;br /&gt;
&lt;br /&gt;
== sudo chgrp -h tty /dev/serial0 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chgrp -h tty /dev/serial1 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chgrp -h tty /dev/serial2 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chgrp -h tty /dev/serial3 ==&lt;br /&gt;
&lt;br /&gt;
== The devices are now under the tty group. Need to add the user to the tty group and dialout group: ==&lt;br /&gt;
&lt;br /&gt;
== sudo adduser $USER tty ==&lt;br /&gt;
&lt;br /&gt;
== sudo adduser $USER dialout ==&lt;br /&gt;
&lt;br /&gt;
== update the permissions for group read on the devices ==&lt;br /&gt;
&lt;br /&gt;
== sudo chmod g+r /dev/ttyUSB0 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chmod g+r /dev/ttyUSB1 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chmod g+r /dev/ttyUSB2 ==&lt;br /&gt;
&lt;br /&gt;
== sudo chmod g+r /dev/ttyAMA0 ==&lt;br /&gt;
&lt;br /&gt;
== reboot ==&lt;br /&gt;
&lt;br /&gt;
== Quelle: &amp;lt;nowiki&amp;gt;https://raspberrypi.stackexchange.com/questions/114366/rpi4-serial-port-not-working-on-either-raspberry-os-or-ubuntu&amp;lt;/nowiki&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36807</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36807"/>
		<updated>2022-01-01T16:18:59Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Serielle Schnittstellen anpassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich im Container die seriellen Schnittstellen. Diese sind standardmäßig nicht dabei. Nach [https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3-4/ Anleitung] wird die /dev/ttyAMA0 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
am Ende hinzufügen:&lt;br /&gt;
 enable_uart=1&lt;br /&gt;
&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
auskommentieren mit an erster Position eingefügtem #, speichern und dann rebooten:&lt;br /&gt;
 console=serial0,115200&lt;br /&gt;
Erfolgskontrolle auf dem Raspi: &amp;lt;code&amp;gt;ls -l /dev&amp;lt;/code&amp;gt; sollte nun eine Schnittstelle ttyAMA0 zeigen.&lt;br /&gt;
&lt;br /&gt;
Für OWX kann die feste Zuordnung mehrerer Onewire-Adapter über   &lt;br /&gt;
&lt;br /&gt;
== Swapping the Serial Ports on Raspberry Pi 3 / 4 ==&lt;br /&gt;
What if you don’t want to use the Bluetooth and you want that high performance &#039;&#039;&#039;/dev/ttyAMA0&#039;&#039;&#039; back on the GPIO? Well you can do this and the way you do this is via a device overlay called “&#039;&#039;&#039;pi3-miniuart-bt&#039;&#039;&#039;” i.e. use the mini-uart (&#039;&#039;&#039;/dev/ttyS0&#039;&#039;&#039;) for Bluetooth (you may get some loss of performance on your Bluetooth though).&lt;br /&gt;
&lt;br /&gt;
You can also just disable the Bluetooth all together by using another overlay “&#039;&#039;&#039;pi3-disable-bt&#039;&#039;&#039;”. In both cases if you can find out more of what they do here: &#039;&#039;&#039;/boot/overlays/README&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To use add the following line to the /boot/config.txt&lt;br /&gt;
 $ sudo nano /boot/config.txt&lt;br /&gt;
and add:&lt;br /&gt;
 dtoverlay=pi3-miniuart-bt&lt;br /&gt;
Save and reboot for changes to take effect.&lt;br /&gt;
&lt;br /&gt;
You can check that it has worked by:&lt;br /&gt;
 $ ls -l /dev&lt;br /&gt;
and you’ll see something like this:&lt;br /&gt;
&lt;br /&gt;
zurück zum [[S7]]-Ausgangs-Artikel&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36806</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36806"/>
		<updated>2022-01-01T16:03:27Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Umzug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;: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 &amp;lt;Strg&amp;gt;+&amp;lt;c&amp;gt; abbrechen und die Container im Hintergurnd neu starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serielle Schnittstellen anpassen ====&lt;br /&gt;
Für die S5 und OWX brauche ich im Container die seriellen Schnittstellen. Diese sind standardmäßig nicht dabei. Nach [https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3-4/ Anleitung] wird die /dev/ttyAMA0 zunächst auf dem Raspi aktiviert:&lt;br /&gt;
&lt;br /&gt;
zurück zum [[S7]]-Ausgangs-Artikel&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36805</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36805"/>
		<updated>2022-01-01T15:45:51Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Umzug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Umzug ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; nach [https://haus-automatisierung.com/hardware/fhem/2017/11/24/docker-auf-raspberry-pi.html Anleitung] auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /home/pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git clone -b raspbian &amp;lt;nowiki&amp;gt;https://github.com/klein0r/fhem-docker.git&amp;lt;/nowiki&amp;gt; fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install docker-compose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann erneut per ssh anmelden.&lt;br /&gt;
 &amp;lt;code&amp;gt;cd fhem-docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;docker-compose up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgskontrolle: Im Browser unter &amp;lt;raspi-ip&amp;gt;:8083/fhem sollte ein optisch und technisch entstaubtes FHEM zu sehen sein.&lt;br /&gt;
&lt;br /&gt;
zurück zum [[S7]]-Ausgangs-Artikel&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36804</id>
		<title>S7 Beispielkonfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=S7_Beispielkonfiguration&amp;diff=36804"/>
		<updated>2022-01-01T15:27:02Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: /* Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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. &lt;br /&gt;
Ausgangspunkt ist eine in 20 Jahren gewachsene S5-95U-Haussteuerung. Inzwischen wurde begonnen diese um eine FHEM-Anbindung zu ergänzen. Ich demonstriere die vorhandenen Möglichkeiten, indem ich meinen Arbeitsfortschritt hier dokumentiere.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Status von S5-Ausgängen in FHEM anzeigen==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;imgrefurl=http://www.hgreibaum-kleinklaeranlagen-erdbau.de/launh.html&amp;amp;h=347&amp;amp;w=600&amp;amp;tbnid=wfyoztNN7sVVuM:&amp;amp;vet=1&amp;amp;tbnh=90&amp;amp;tbnw=156&amp;amp;docid=xl2wKluoAEYsmM&amp;amp;hl=en&amp;amp;client=browser-ubuntu&amp;amp;usg=__zwf8AXZ04gHEqR2A7MmRon_OKEw=&amp;amp;sa=X&amp;amp;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.&lt;br /&gt;
&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define Abpumpen S7_DRead outputs 0 13.0&lt;br /&gt;
 attr Abpumpen IODev s5test&lt;br /&gt;
 attr Abpumpen icon icoBaum&lt;br /&gt;
 attr Abpumpen room Abwasser&lt;br /&gt;
 attr Abpumpen sortby 03&lt;br /&gt;
&lt;br /&gt;
 define Umpumpen S7_DRead outputs 0 13.1&lt;br /&gt;
 attr Umpumpen IODev s5test&lt;br /&gt;
 attr Umpumpen icon audio_repeat&lt;br /&gt;
 attr Umpumpen room Abwasser&lt;br /&gt;
 attr Umpumpen sortby 02&lt;br /&gt;
&lt;br /&gt;
 define Zupumpen S7_DRead outputs 0 13.2&lt;br /&gt;
 attr Zupumpen IODev s5test&lt;br /&gt;
 attr Zupumpen icon scene_toilet_alternat&lt;br /&gt;
 attr Zupumpen room Abwasser&lt;br /&gt;
 attr Zupumpen sortby 01&lt;br /&gt;
&lt;br /&gt;
[[File:Launhardt-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==vorhandene S5-Lampensteuerung um FHEM ergänzen==&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :U(                                      &lt;br /&gt;
 00AD      :U(                              &lt;br /&gt;
 00AE      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00AF      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B0      :)                               &lt;br /&gt;
 00B1      :UN  M  61.4                              Flankenmerker&lt;br /&gt;
 00B2      :S   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B3      :U(                               &lt;br /&gt;
 00B4      :O   E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00B5      :O   M  65.0                              Merker für FHEM&lt;br /&gt;
 00B6      :)                               &lt;br /&gt;
 00B7      :U   M  61.4                              Flankenmerker&lt;br /&gt;
 00B8      :R   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00B9      :U   A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BC      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00BD      :S   M  61.4                              Flankenmerker&lt;br /&gt;
 00BE      :UN  E  64.7                              Taster im Arbeitszimmer&lt;br /&gt;
 00BF      :UN  M  65.0                              Merker für FHEM&lt;br /&gt;
 00C0      :UN  A  65.7                              Lampe Arbeiten Giebel&lt;br /&gt;
 00C1      :R   M  61.4                              Flankenmerker&lt;br /&gt;
 00C2      :NOP 0 &lt;br /&gt;
           :***&lt;br /&gt;
&#039;&#039;&#039;zugehörige FHEM-Konfiguration:&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0                    #FHEM Hardwarezugriff konfigurieren&lt;br /&gt;
&lt;br /&gt;
 define M65.0 S7_DWrite flags 0 65.0                 #S5-Merker M65.0 für FHEM-Schreibzugriff&lt;br /&gt;
 attr M65.0 IODev s5test                             #M65.0 an /dev/ttyAMA0 ist gemeint&lt;br /&gt;
 attr M65.0 eventMap /on-for-timer 1 /trigger:tasten #1-s-Impuls außerdem Web: trigger -&amp;gt; tasten &lt;br /&gt;
 attr M65.0 icon light_pendant_light                 #Standard-Icon ersetzen&lt;br /&gt;
 attr M65.0 room Arbeitszimmer                       #Raumzuordnung zur optischen Gruppierung&lt;br /&gt;
 attr M65.0 webCmd tasten                            #Button auf Weboberfläche gelabelt als &amp;quot;tasten&amp;quot;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Namenskonvention für S5-FHEM-Projekt==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Aufbau der Namen:&#039;&#039;&#039; A.B.C.D ab 2022 als A_B_C_D&lt;br /&gt;
 A 	  	Ort im Gebäude oder auf dem Grundstück&lt;br /&gt;
 B 	  	Raum oder nähere Örtlichkeit&lt;br /&gt;
 C 	  	Gerät&lt;br /&gt;
 D               Zweck&lt;br /&gt;
&lt;br /&gt;
Heizungsvorlauf Temperatursensor im Obergeschoss: OG.hr.DS1820.Hz_VL&lt;br /&gt;
&lt;br /&gt;
Rollladen im Schlafzimmer öffnen:                 OG.sz.M1763.RlHo&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A  	        ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	KG 	  	Kellergeschoß&lt;br /&gt;
  	  	EG 	  	Erdgeschoß&lt;br /&gt;
  	  	OG 	  	Obergeschoß&lt;br /&gt;
  	  	SB 	  	Spitzboden&lt;br /&gt;
  	  	AB 	  	Außenbereich &lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;B 	  	ID 	  	Beschreibung&#039;&#039;&#039;&lt;br /&gt;
  	  	wa 	  	Wanne&lt;br /&gt;
                 du              Dusche&lt;br /&gt;
  	  	wz 	  	Wohnen, Weg&lt;br /&gt;
  	  	fl 	  	Flur&lt;br /&gt;
  	  	cp 	  	Carport&lt;br /&gt;
  	  	hr 	  	Heizung&lt;br /&gt;
  	  	hv	  	Holzvergaser&lt;br /&gt;
  	  	k	  	Keller&lt;br /&gt;
  	  	ku 	  	Küche&lt;br /&gt;
  	  	sz 	  	Straße&lt;br /&gt;
  	  	sz 	  	Schlafen&lt;br /&gt;
  	  	  	  	 &lt;br /&gt;
 &#039;&#039;&#039;C 	        &amp;lt;Gerätename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;D               &amp;lt;Zweck&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Lampensteuerung tastbar um ein/aus ergänzen==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm nochmals ergänzt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   12           Arbeitszimmer&lt;br /&gt;
 00AC      :O(&lt;br /&gt;
 00AD      :U(                                       &lt;br /&gt;
 00AE      :U(&lt;br /&gt;
 00AF      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B0      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00B1      :)&lt;br /&gt;
 00B2      :UN  -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00B3      :)&lt;br /&gt;
 00B4      :O   -M 166.7                    M166.7   OG.Az.M1667.LaGiEin FHEM&lt;br /&gt;
 00B5      :S   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00B6      :O(&lt;br /&gt;
 00B7      :U(&lt;br /&gt;
 00B8      :O   -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00B9      :O   -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00BA      :)&lt;br /&gt;
 00BB      :U   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00BC      :)&lt;br /&gt;
 00BD      :O   -M 168.7                    M168.7   OG.Az.M1667.LaGiAus FHEM&lt;br /&gt;
 00BE      :R   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00BF      :U   -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C0      :)&lt;br /&gt;
 00C1      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C2      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C3      :S   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C4      :UN  -AzLiGt                     E64.7    Lichttaster&lt;br /&gt;
 00C5      :UN  -M 164.7                    M164.7   OG.Az.M1647.LaGiTast FHEM&lt;br /&gt;
 00C6      :UN  -AzLaG                      A65.7    Lampe Arbeiten Giebel&lt;br /&gt;
 00C7      :R   -AzLaGf                     M61.4    Flankenmerker&lt;br /&gt;
 00C8      :NOP 0&lt;br /&gt;
[[File:FUP-Giebellampe.png|mini|ohne|Funktionsplan der Licht-Steuerung]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
 define s5test S7 S5 /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1647.LichtGtast S7_DWrite flags 0 164.7&lt;br /&gt;
 attr OG.az.M1647.LichtGtast IODev s5test&lt;br /&gt;
 attr OG.az.M1647.LichtGtast alias Giebellampe&lt;br /&gt;
 attr OG.az.M1647.LichtGtast eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1647.LichtGtast icon light_pendant_light&lt;br /&gt;
 attr OG.az.M1647.LichtGtast room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1647.LichtGtast webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1667.LichtGaus S7_DWrite flags 0 166.7&lt;br /&gt;
 attr OG.az.M1667.LichtGaus IODev s5test&lt;br /&gt;
 attr OG.az.M1667.LichtGaus alias Giebellampe.aus&lt;br /&gt;
 attr OG.az.M1667.LichtGaus eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1667.LichtGaus icon light_light&lt;br /&gt;
 attr OG.az.M1667.LichtGaus room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1667.LichtGaus webCmd tasten&lt;br /&gt;
&lt;br /&gt;
 define OG.az.M1687.LichtGein S7_DWrite flags 0 168.7&lt;br /&gt;
 attr OG.az.M1687.LichtGein IODev s5test&lt;br /&gt;
 attr OG.az.M1687.LichtGein alias Giebellampe.an&lt;br /&gt;
 attr OG.az.M1687.LichtGein eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.az.M1687.LichtGein icon light_light_dim_100&lt;br /&gt;
 attr OG.az.M1687.LichtGein room Arbeitszimmer&lt;br /&gt;
 attr OG.az.M1687.LichtGein webCmd tasten&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Giebellampe2.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Rolladensteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
In meiner S5 existiert bisher ein Programm welches nur einen Taster mit hoch - stop - runter - stop verwendet. Bei der Rolladensteuerung über das Webinterface ist es sinnvoller je einen Button für das Hochfahren, einen für das Runterfahren und einen für STOP zu konfigurieren.  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.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S5-Programm&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 NETZWERK   2            RL Schlafen hoch&lt;br /&gt;
 0012      :O(&lt;br /&gt;
 0013      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 0014      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0015      :)&lt;br /&gt;
 0016      :UN  -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0017      :L   KT 030.2&lt;br /&gt;
 0019      :SA  T  5                                 Timer Schlafen hoch&lt;br /&gt;
 001A      :O   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 001B      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 001C      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 001D      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 001E      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 001F      :R   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0020      :NOP 0&lt;br /&gt;
 0021      :NOP 0&lt;br /&gt;
 0022      :U   T  5                                 Timer Schlafen hoch&lt;br /&gt;
 0023      :=   -RUPS                       A10.4    Ausgang RLaden hoch Schlafem&lt;br /&gt;
 0024      :***&lt;br /&gt;
        &lt;br /&gt;
 NETZWERK   3            RL Schlafen runter&lt;br /&gt;
 0025      :O(&lt;br /&gt;
 0026      :O   -XRDNS                      M19.3    Tasterauswertung RL Schlafen run&lt;br /&gt;
 0027      :O   -M 178.3                    M178.3   OG.Sz.M1763.RlRu FHEM&lt;br /&gt;
 0028      :)&lt;br /&gt;
 0029      :UN  -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002A      :L   KT 030.2&lt;br /&gt;
 002C      :SA  T  6                                 Timer Schlafen runter&lt;br /&gt;
 002D      :O   -RUPS                       A10.4    Ausgang RLaden hoch Schlafen&lt;br /&gt;
 002E      :O   -XRUPS                      M19.2    Tasterauswertung RL Schlafen hoc&lt;br /&gt;
 002F      :O   -RStopS                     M19.4    RL Stop&lt;br /&gt;
 0030      :O   -M 177.3                    M177.3   OG.Sz.M1763.RlStop FHEM&lt;br /&gt;
 0031      :O   -M 176.3                    M176.3   OG.Sz.M1763.RlHo FHEM&lt;br /&gt;
 0032      :R   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0033      :NOP 0&lt;br /&gt;
 0034      :NOP 0&lt;br /&gt;
 0035      :U   T  6                                 Timer Schlafen runter&lt;br /&gt;
 0036      :=   -RDNS                       A10.5    Ausgang RLaden runter Schlafen&lt;br /&gt;
 0037      :***&lt;br /&gt;
       &lt;br /&gt;
[[File:FUP-RL.png|mini|ohne|Funktionsplan der Rollladensteuerung]]&lt;br /&gt;
&lt;br /&gt;
Der Motorschutz-Timer sorgt dafür, dass die Stromversorgung nach der maximalen Laufzeit abgeschaltet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zugehöriger Abschnitt aus der fhem.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 define OG.sz.M1763.RlHo S7_DWrite flags 0 176.3&lt;br /&gt;
 attr OG.sz.M1763.RlHo IODev s5test&lt;br /&gt;
 attr OG.sz.M1763.RlHo alias Rollladen.hoch&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1763.RlHo event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1763.RlHo eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1763.RlHo icon rc_UP&lt;br /&gt;
 attr OG.sz.M1763.RlHo room Schlafen&lt;br /&gt;
 attr OG.sz.M1763.RlHo sortby 01&lt;br /&gt;
 attr OG.sz.M1763.RlHo webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1773.RlStop S7_DWrite flags 0 177.3&lt;br /&gt;
 attr OG.sz.M1773.RlStop IODev s5test&lt;br /&gt;
 attr OG.sz.M1773.RlStop alias Rollladen.stop&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1773.RlStop event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1773.RlStop eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1773.RlStop icon rc_REC&lt;br /&gt;
 attr OG.sz.M1773.RlStop room Schlafen&lt;br /&gt;
 attr OG.sz.M1773.RlStop sortby 02&lt;br /&gt;
 attr OG.sz.M1773.RlStop webCmd tasten&lt;br /&gt;
 &lt;br /&gt;
 define OG.sz.M1783.RlRu S7_DWrite flags 0 178.3&lt;br /&gt;
 attr OG.sz.M1783.RlRu IODev s5test&lt;br /&gt;
 attr OG.sz.M1783.RlRu alias Rollladen.runter&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-min-interval .*:600&lt;br /&gt;
 attr OG.sz.M1783.RlRu event-on-change-reading state&lt;br /&gt;
 attr OG.sz.M1783.RlRu eventMap /on-for-timer 1 /trigger:tasten&lt;br /&gt;
 attr OG.sz.M1783.RlRu icon rc_DOWN&lt;br /&gt;
 attr OG.sz.M1783.RlRu room Schlafen&lt;br /&gt;
 attr OG.sz.M1783.RlRu sortby 03&lt;br /&gt;
 attr OG.sz.M1783.RlRu webCmd tasten&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:rl-web.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
Der Rolladen kann nun über das Webinterface auf beliebigen Geräten gezielt geschlossen bzw. geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Bewässerungssteuerung ergänzen==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:Qe-bewaesserung.png|mini|ohne|Schaltplan der Bewässerung]]&lt;br /&gt;
wird fortgesetzt wenn es wieder wärmer ist ..&lt;br /&gt;
&lt;br /&gt;
==FHEM-S5-Heizungssteuerung neu anlegen==&lt;br /&gt;
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 &amp;quot;dumme&amp;quot; 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. &lt;br /&gt;
===Sensorik mit OWX===&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=56881.0 haklige Fremdsoftware-Installationen] direkt mit Perl auf den Bus zugegriffen wird. Bisher läuft das Verfahren stabil.&lt;br /&gt;
&lt;br /&gt;
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 -&amp;gt; USB -&amp;gt; 1-wire über einen [http://www.fuchs-shop.com/de/shop/17/1/13372195/ DS9097U kompatiblen Adapter] und gegen die [https://forum.fhem.de/index.php?topic=11709.0 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-Devices 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. }} &lt;br /&gt;
&lt;br /&gt;
Empfehlenswerte kombinierte Sensoren für Temperatur und Luftfeuchtigkeit bzw. Einstrahlung habe ich [http://www.tm3d.de/shop/ hier] gekauft. Für die restlichen Temperaturmesstellen sind es fertig konfektionierte DS1820 mit Hülse geworden, wie man sie sehr preiswert bei z.B. ebay bekommt.&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
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 [https://forum.fhem.de/index.php?topic=21473.0 Forum] empfohlenen [http://www.reichelt.de/WAGO-250-210/3/index.html?ACTION=3&amp;amp;GROUPID=7539&amp;amp;ARTICLE=100838&amp;amp;SHOW=1&amp;amp;OFFSET=16&amp;amp; Variante]. Mögliche Problemlösungen sind [https://forum.fhem.de/index.php/topic,56881.30.html hier] dokumentiert. Als Leitungsmaterial für die gewählte Verbindungstechnik hat sich bei mir für ca. 100 m, Telefonleitung für feste Verlegung YStY 2x2x0,6 bewährt.&lt;br /&gt;
&lt;br /&gt;
Bei der Sensor-Installation bin ich mit Hilfe der OWX-Automatik schrittweise vorgegangen, um die Übersicht zu behalten:&lt;br /&gt;
*Status von OneWire  unter Unsorted im WEB-Interface muss Active sein,&lt;br /&gt;
*ersten Sensor einzeln an den Bus geklemmt,&lt;br /&gt;
*in der Detailansicht {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste mit dem ersten Sensor in die Textdatei owx1 kopiert,&lt;br /&gt;
*owx1 als owx-uebersicht gespeichert und den Zweck des Sensors ergänzt,&lt;br /&gt;
*config nicht gespeichert!, um Sensoren immer wieder komplett neu abzufragen,&lt;br /&gt;
*shutdown restart ausgeführt, damit OWX den ersten Sensor vergisst,&lt;br /&gt;
*nächsten Sensor zusätzlich an den Bus geklemmt,&lt;br /&gt;
*In der Detailansicht  wieder {{Taste|get}} Onewire {{Taste|devices}} ausgewählt,&lt;br /&gt;
*die erscheinende Liste in die Textdatei owx2 kopiert,&lt;br /&gt;
*Dateien owx1 und owx2 mit Meld (diff-Programm) verglichen, um den zweiten Sensor zu separieren,&lt;br /&gt;
*Differenz in owx-uebersicht einfügt und Zweck ergänzt,&lt;br /&gt;
*Differenz nach owx1 übernommen, für den neuen IST-Zustand,&lt;br /&gt;
*usw. usf.&lt;br /&gt;
*erst wenn der letzte Sensor erkannt wurde, fhem.cfg gespeichert,&lt;br /&gt;
*Sensoren entsprechend dem Benennungsschema und Zweck umbenannt:&lt;br /&gt;
&lt;br /&gt;
 rename OWX_20_FF0939521603 OG.hr.DS1820.Hz&lt;br /&gt;
 &lt;br /&gt;
fhem.cfg Ausschnitt komplett mit Zuordnung und Lastoptimierung für den FHEM-Host:&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.DS1820.Hz_VL OWTHERM DS18B20 FF0939521603&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL IODev OneWire&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL alias Hz-VL&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-min-interval 60&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL event-on-change-reading temperature:0.3&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL group FBH-Mischer,Fußboden&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL model DS18B20&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL room Heizung&lt;br /&gt;
 attr OG.hr.DS1820.Hz_VL sortby 01&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Datei:Owx-ergebnis.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Heizkreis-Regelung mit PWM===&lt;br /&gt;
&lt;br /&gt;
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]] &lt;br /&gt;
[[Datei:6es5451-8md11.jpg|mini|ohne|230 V Ausgabemodul]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 define fh PWM&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.PWMR PWMR fh 0.7,0  OG.wo.DS1820.TF OG.hr.M706.TAwo&lt;br /&gt;
 attr OG.wo.PWMR alias Wohnen-Soll&lt;br /&gt;
 attr OG.wo.PWMR autoCalcTemp 1&lt;br /&gt;
 attr OG.wo.PWMR group Raum&lt;br /&gt;
 attr OG.wo.PWMR room Heizung,Wohnen&lt;br /&gt;
 attr OG.wo.PWMR tempDay 19&lt;br /&gt;
 attr OG.wo.PWMR tempNight 16&lt;br /&gt;
 attr OG.wo.PWMR tempRule1 Mo-Fr 11:00,D 20:00,N&lt;br /&gt;
 attr OG.wo.PWMR tempRule2 Sa-So 6:00,D 20:00,N&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Um die Funktion von PWM zu visualisieren, kann man eine [[Plots_erzeugen|grafische Darstellung]] in Form eines Diagramms definieren:&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.graph.dummy dummy&lt;br /&gt;
 attr OG.wo.graph.dummy event-on-change-reading state&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.temp at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS1820.TF&amp;quot;, &amp;quot;temperature&amp;quot;,0);;$d= &#039;OG.wo.temp &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define FLog_OG.wo.graph.dummy FileLog ./log/OG.wo.graph.dummy-%Y-%m-%d.log OG.wo.graph.dummy&lt;br /&gt;
 attr FLog_OG.wo.graph.dummy logtype text&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.humidity at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.wo.DS2438.RF&amp;quot;,&amp;quot;relHumidity&amp;quot;,0);;$d= &#039;OG.wo.humidity &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define OG.wo.TA at +*00:05:00 { my $d= ReadingsVal(&amp;quot;OG.hr.A190.TAwo&amp;quot;,&amp;quot;state&amp;quot;,0);;$d= &#039;OG.wo.TA &#039;.$d;; fhem(&amp;quot;set OG.wo.graph.dummy $d&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
 define SVG_FLog_OG.wo.graph.dummy_1 SVG FLog_OG.wo.graph.dummy:SVG_FLog_OG.wo.graph.dummy_1:CURRENT&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wz chart.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Regelung der FBH-Vorlauftemperatur mit dem Modul PID20===&lt;br /&gt;
&lt;br /&gt;
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&amp;amp;fct=getasset&amp;amp;id1=10416 Siemens MXG461], welches von der S5 mit 0..10 V analog angesteuert werden kann: &lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461.png|mini|ohne|MXG461]]&lt;br /&gt;
&lt;br /&gt;
Bei der S5-95U kann man dazu den internen Analogausgang verwenden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:MXG461 ansteuern.png|mini|ohne|Verbindung 95U - MXG461]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 :  SPA FB 251&lt;br /&gt;
 NAME   :  RLG:AA&lt;br /&gt;
 XE     :    MW130&lt;br /&gt;
 BG     :    KF=8&lt;br /&gt;
 KNKT   :    KY=0,0 &lt;br /&gt;
 OGR    :    KF=100&lt;br /&gt;
 UGR    :    KF=0&lt;br /&gt;
 FEH    :    M  131.0&lt;br /&gt;
 BU     :    M  131.1&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16 Bit Merkerwort zum Schreiben&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.MW130.Mischventil S7_AWrite flags 0 130 u16&lt;br /&gt;
 attr OG.hr.MW130.Mischventil IODev s5test&lt;br /&gt;
 attr OG.hr.MW130.Mischventil alias Ventilstellung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.MW130.Mischventil event-on-change-reading state&lt;br /&gt;
 attr OG.hr.MW130.Mischventil group FBH-Mischer&lt;br /&gt;
 attr OG.hr.MW130.Mischventil room Heizung&lt;br /&gt;
 attr OG.hr.MW130.Mischventil sortby 01&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Definition des PID-Reglers&#039;&#039;&#039;&lt;br /&gt;
 define PID.Test PID20 OG.hr.DS1820.Hz_VL:temperature OG.hr.MW130.Mischventil:&lt;br /&gt;
 attr PID.Test group FBH-Mischer&lt;br /&gt;
 attr PID.Test pidActorErrorPos 0&lt;br /&gt;
 attr PID.Test pidActorInterval 1&lt;br /&gt;
 attr PID.Test pidCalcInterval 20&lt;br /&gt;
 attr PID.Test pidReverseAction 1&lt;br /&gt;
 attr PID.Test room Heizung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SPS-Konfigurationsfehler melden&#039;&#039;&#039;&lt;br /&gt;
 define OG.hr.M1301.FEH S7_DRead flags 0 131.0&lt;br /&gt;
 attr OG.hr.M1301.FEH IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.FEH alias SPS-Konfiguration&lt;br /&gt;
 attr OG.hr.M1301.FEH devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.FEH event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.FEH event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.FEH group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.FEH room Heizung&lt;br /&gt;
 attr OG.hr.M1301.FEH sortby 03&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM-Stellgrößen-Bereichsüberschreitung melden&#039;&#039;&#039; &lt;br /&gt;
 define OG.hr.M1301.BU S7_DRead flags 0 131.1&lt;br /&gt;
 attr OG.hr.M1301.BU IODev s5test&lt;br /&gt;
 attr OG.hr.M1301.BU alias FHEM-Sollwert&lt;br /&gt;
 attr OG.hr.M1301.BU devStateIcon on:10px-kreis-rot off:10px-kreis-gruen&lt;br /&gt;
 attr OG.hr.M1301.BU event-min-interval .*:600&lt;br /&gt;
 attr OG.hr.M1301.BU event-on-change-reading state&lt;br /&gt;
 attr OG.hr.M1301.BU group FBH-Mischer&lt;br /&gt;
 attr OG.hr.M1301.BU room Heizung&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fhem-s5-mv.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
===Warmwasserspeicherladung mit DOIF===&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
 define OG.hr.WW.oben_heizen DOIF &lt;br /&gt;
             (([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 8)) or\&lt;br /&gt;
             (([OG.hr.DS1820.wwo:temperature:d] &amp;lt; 41) and &lt;br /&gt;
              ([OG.ks.DS1820.P500o:temperature:d] &amp;gt; ([OG.hr.DS1820.wwo:temperature:d] + 4))))\&lt;br /&gt;
        (set  OG.hr.M710.TAWW on;; set OG.hr.M700.HzPu on) &lt;br /&gt;
 DOELSE  (set  OG.hr.M710.TAWW off;; set OG.hr.M700.HzPu off)&lt;br /&gt;
 attr OG.hr.WW.oben_heizen alias TA_WW&lt;br /&gt;
 attr OG.hr.WW.oben_heizen devStateIcon cmd_1:10px-kreis-rot  cmd_2:10px-kreis-gruen &lt;br /&gt;
 attr OG.hr.WW.oben_heizen do resetwait &lt;br /&gt;
 attr OG.hr.WW.oben_heizen group Warmwasser&lt;br /&gt;
 attr OG.hr.WW.oben_heizen room Heizung&lt;br /&gt;
 attr OG.hr.WW.oben_heizen sortby 04&lt;br /&gt;
 attr OG.hr.WW.oben_heizen wait 120&lt;br /&gt;
&lt;br /&gt;
===Visualisierung des Heizungsschemas mit FLOORPLAN===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:Heizungsschema2.png|mini|ohne|Heizungsschema]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Fp heizungsschema.png|mini|ohne|Erfolgskontrolle]]&lt;br /&gt;
&lt;br /&gt;
==Docker mit Integration von Nodered, MQTT, IOBroker ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Umzug ==&lt;br /&gt;
&lt;br /&gt;
Ich haber 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.&lt;br /&gt;
[[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]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Der Imager lässt sich unter Ubuntu so installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install snapd&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo snap install rpi-imager&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Start des neuen Systems, mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; folgende Einstellungen ändern:&lt;br /&gt;
# System Options -&amp;gt; Password&lt;br /&gt;
# Interface Options -&amp;gt; SSH&lt;br /&gt;
# Localisation Options -&amp;gt; L1 bis L4&lt;br /&gt;
Docker kann nach dem SSH-Login &amp;lt;code&amp;gt;ssh pi@&amp;lt;raspi-IP&amp;gt;&amp;lt;/code&amp;gt; auf dem Raspi installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install wget git apt-transport-https vim telnet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sSL &amp;lt;nowiki&amp;gt;https://get.docker.com&amp;lt;/nowiki&amp;gt; | sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo usermod -aG docker pi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zurück zum [[S7]]-Ausgangs-Artikel&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Siemens PLC]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Raspberry_Pi_OS_Imager.png&amp;diff=36803</id>
		<title>Datei:Raspberry Pi OS Imager.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Raspberry_Pi_OS_Imager.png&amp;diff=36803"/>
		<updated>2022-01-01T14:44:42Z</updated>

		<summary type="html">&lt;p&gt;Krueuw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OS für Docker auswählen&lt;/div&gt;</summary>
		<author><name>Krueuw</name></author>
	</entry>
</feed>