<?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=Cwagner</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=Cwagner"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Cwagner"/>
	<updated>2026-04-24T14:23:28Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=40782</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=40782"/>
		<updated>2026-02-09T13:48:11Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrektur des Seitentitels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
| Bild = ITRV.jpg&lt;br /&gt;
| Bildbeschreibung = Batterieloser Heizungssteller&lt;br /&gt;
| HWProtocol = EnOcean&lt;br /&gt;
| HWType = Aktor&lt;br /&gt;
| HWCategory = EnOcean&lt;br /&gt;
| HWComm = EnOcean Funk, 868Mhz&lt;br /&gt;
| HWProtokoll = EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
| HWChannels = 1 (bidirektional)&lt;br /&gt;
| HWVoltage = 3.2 V, LiFePo-Akku&lt;br /&gt;
| HWPowerConsumption = unbekannt&lt;br /&gt;
| HWPoweredBy = TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
| HWSize = 59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
neuere, runde Modelle: 55 x 95 [mm] (Ø x T), 260 g&lt;br /&gt;
| HWDeviceFHEM = [http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
| HWManufacturer = Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iTRV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung, der seine Energie per Energy Harvesting aus der Wärme des Vorlaufes zieht. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Aktuell in der Auslieferung sind die Modelle MVA-008 (wie 004) und MVA-009 (wie 005) mit einer USB-Buchse zum Nachladen, falls der eingebaute Speicher leergelaufen sein sollte. &lt;br /&gt;
&lt;br /&gt;
Neben der hier beschriebenen EnOcean-Variante gibt es auch Modelle für LoRaWan.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 ff. im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...40||Soll-Temperatur für den FHEM-PID-Controler: der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...40||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|feedTemp&lt;br /&gt;
|32.5&lt;br /&gt;
|&lt;br /&gt;
|Die Modelle ab 004 haben einen zweiten Thermofühler, der verlässlich die Vorlauftemperatur am Ventilsitz misst und zur Steuerung des eingebauten PID-Controlers herangezogen wird.&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState|||| processing |alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne Temperatur: wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||Modelle &amp;gt;004: A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actualTemp&lt;br /&gt;
|biDir&lt;br /&gt;
|t/°C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|pidDeltaTreshold&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|Minimale Veränderung der Aktorstellung in Prozent&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; ab MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das mindestens einmal pro Stunde ein Event mit Namen temperature (aktuelle Raumtemperatur) meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor &#039;&#039;&#039;dead&#039;&#039;&#039; oder &#039;&#039;&#039;no Response from actuator&#039;&#039;&#039; kann man im Betrieb mit einem externen Sensor verhindern, indem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
Die neueren Modelle beginnen nach einer sehr langen Sommerpause bei leerem Akku schon nach wenigen Minuten mit Vorlauftemperaturen um 30 Grad wieder ihren Betrieb alleine mit dem Strom, den der kleine Thermo-Generator erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Optimierungstipps, um möglichst wenig Energie im Aktor zu verbrauchen: Sommerbetrieb und Filtern von Sollwert-Verstellungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
Abgrenztung ActualTemp gegenüber temperatureRefDev&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=39605</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=39605"/>
		<updated>2024-10-17T06:40:11Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: sprachliche Korrekturen; Beschreibung Attribut actualTemp entfernt und in ToDo übernommen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
| Bild = ITRV.jpg&lt;br /&gt;
| Bildbeschreibung = Batterieloser Heizungssteller&lt;br /&gt;
| HWProtocol = EnOcean&lt;br /&gt;
| HWType = Aktor&lt;br /&gt;
| HWCategory = EnOcean&lt;br /&gt;
| HWComm = EnOcean Funk, 868Mhz&lt;br /&gt;
| HWProtokoll = EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
| HWChannels = 1 (bidirektional)&lt;br /&gt;
| HWVoltage = 3.2 V, LiFePo-Akku&lt;br /&gt;
| HWPowerConsumption = unbekannt&lt;br /&gt;
| HWPoweredBy = TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
| HWSize = 59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
neuere, runde Modelle: 55 x 95 [mm] (Ø x T), 260 g&lt;br /&gt;
| HWDeviceFHEM = [http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
| HWManufacturer = Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung, der seine Energie per Energy Harvesting aus der Wärme des Vorlaufes zieht. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Aktuell in der Auslieferung sind die Modelle MVA-008 (wie 004) und MVA-009 (wie 005) mit einer USB-Buchse zum Nachladen, falls der eingebaute Speicher leergelaufen sein sollte. &lt;br /&gt;
&lt;br /&gt;
Neben der hier beschriebenen EnOcean-Variante gibt es auch Modelle für LoRaWan.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 ff. im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...40||Soll-Temperatur für den FHEM-PID-Controler: der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...40||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|feedTemp&lt;br /&gt;
|32.5&lt;br /&gt;
|&lt;br /&gt;
|Die Modelle ab 004 haben einen zweiten Thermofühler, der verlässlich die Vorlauftemperatur am Ventilsitz misst und zur Steuerung des eingebauten PID-Controlers herangezogen wird.&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState|||| processing |alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne Temperatur: wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||Modelle &amp;gt;004: A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actualTemp&lt;br /&gt;
|biDir&lt;br /&gt;
|t/°C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|pidDeltaTreshold&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|Minimale Veränderung der Aktorstellung in Prozent&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; ab MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das mindestens einmal pro Stunde ein Event mit Namen temperature (aktuelle Raumtemperatur) meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor &#039;&#039;&#039;dead&#039;&#039;&#039; oder &#039;&#039;&#039;no Response from actuator&#039;&#039;&#039; kann man im Betrieb mit einem externen Sensor verhindern, indem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
Die neueren Modelle beginnen nach einer sehr langen Sommerpause bei leerem Akku schon nach wenigen Minuten mit Vorlauftemperaturen um 30 Grad wieder ihren Betrieb alleine mit dem Strom, den der kleine Thermo-Generator erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Optimierungstipps, um möglichst wenig Energie im Aktor zu verbrauchen: Sommerbetrieb und Filtern von Sollwert-Verstellungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
Abgrenztung ActualTemp gegenüber temperatureRefDev&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=39232</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=39232"/>
		<updated>2024-04-15T20:52:08Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Rücknahme einer Randnotiz, weil sie sich als fehlerhaft erwies.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim [[Raspberry Pi]] handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].&lt;br /&gt;
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspberry Pi OS Distribution (ab Mitte 2019 &#039;&#039;Buster&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Installation / Setup ==&lt;br /&gt;
=== Betriebssystem ===&lt;br /&gt;
====Vorbemerkung====&lt;br /&gt;
Raspberry Pi OS ist direkt bei raspberrybi.org unter https://www.raspberrypi.org/downloads/raspberry-pi-os/ herunterladbar. Die folgende Anleitung gilt für die lite-Version ohne grafischen Desktop und für die Modelle für B, B+, B2, B3, B3+, Zero W. (Stand Juni 2018)&lt;br /&gt;
&lt;br /&gt;
Alle in diesem Abschnitt verwendeten Code Blöcke benötigen root Rechte. Deshalb bitte immer am Besten im Kontext &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt; ausführen. Man kann auch einzelne Befehle mit sudo davor ausführen, allerdings wird die Berechtigung bei Pipe Befehlen nicht durchgereicht. Einige dieser Kommandos funktionieren in der angegebenen Form nicht unter der Wheezy-Version [https://en.wikipedia.org/wiki/Raspberry_Pi_OS#Release_history] des RPi OS. Läuft der betreffende RPi noch unter Wheezy, ist ein Upgrade des RPi OS empfehlenswert.&lt;br /&gt;
&lt;br /&gt;
Alle Dateien müssen im Linux-Format (nur LF als Zeilenende) erzeugt/editiert werden! Unbedingt einen geeigneten Editor verwenden und auf das Format beim Speichern achten!&lt;br /&gt;
&lt;br /&gt;
====SD-Karte vorbereiten====&lt;br /&gt;
Die heruntergeladene Datei muss entpackt und auf die Speicherkarte geschrieben werden. Es gibt dazu verschiedene Tools je nach Betriebssystem. Für Windows ist windisk32imager zu empfehlen, Projektseite [https://sourceforge.net/projects/win32diskimager/]. Für Mac OS gibt es den Pi Filler.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Anleitungen zur Vorgehensweise finden sich für die Betriebssysteme Linux, Mac OS und Windows unter [https://www.raspberrypi.org/documentation/installation/installing-images/README.md Writing an image to the SD card]&lt;br /&gt;
&lt;br /&gt;
Die SD Card enthält nun zwei Partitionen/Laufwerke, wobei das erste Laufwerk unter alle Betriebssystemen lesbar ist. In diesem Laufwerk (/boot) müssen jetzt noch zwei Dateien erzeugt werden:&lt;br /&gt;
* eine leere Datei mit dem Namen ssh, um den (headless) Zugriff per ssh zu ermöglichen (Pi Filler macht dies automatisch). Hinweis: Eine spätere Aktivierung von SSH ist mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; (Punkt 5 &amp;quot;Interfacing Options&amp;quot;, dann Punkt 2 SSH) möglich, erfordert dann aber Tastatur und Monitor am RPi.&lt;br /&gt;
* eine Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt, wenn der Pi sofort mit WLAN starten soll.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;country=DE&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
network={&lt;br /&gt;
        ssid=&amp;quot;FRITZ!Box 7490&amp;quot;&lt;br /&gt;
        psk=&amp;quot;12345678901234567890&amp;quot; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* SD Karte auswerfen.&lt;br /&gt;
* SD Karte in Raspberry Pi stecken und booten.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann auch Monitor und Tastatur verwendet werden.&lt;br /&gt;
&lt;br /&gt;
====Anmeldung und Grundkonfiguration====&lt;br /&gt;
Default raspberrypi-os: Host raspberrypi, User pi, Passwort raspberry &lt;br /&gt;
&lt;br /&gt;
Default ubuntu: Host ubuntu, User ubuntu, Passwort ubuntu&lt;br /&gt;
&lt;br /&gt;
Anmeldung entweder lokal oder mit dem Befehl: ssh &amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Passwort sollte geändert werden, dazu dem Sicherheitshinweis folgen und &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
Alle unten genannten Befehle müssen mit erhöhten Rechten ausgeführt werden (z. B. sudo)!&lt;br /&gt;
&lt;br /&gt;
Als Erstes sollte: Zeitzone, Sprache und  Hostname angepasst werden. &lt;br /&gt;
Entweder Menügeführt mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; &lt;br /&gt;
oder per Script / Shell Befehle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Zeitzone einstellen &amp;amp; Zeitsynchronisierung über das Internet aktivieren&lt;br /&gt;
timedatectl set-timezone Europe/Berlin&lt;br /&gt;
timedatectl set-ntp true&lt;br /&gt;
&lt;br /&gt;
# Konfigurieren lokale Sprache deutsch&lt;br /&gt;
sed -i -e &#039;s/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/&#039; /etc/locale.gen&lt;br /&gt;
locale-gen&lt;br /&gt;
localectl set-locale LANG=de_DE.UTF-8 LANGUAGE=de_DE&lt;br /&gt;
&lt;br /&gt;
# Hostname &lt;br /&gt;
hostnamectl set-hostname mymachine&lt;br /&gt;
&lt;br /&gt;
# System aktualisieren &lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
#Neustart&lt;br /&gt;
reboot&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Anfang sollte man Befehle nicht verketten, sondern immer auf die Ausgabe warten (es sei denn, man hat Erfahrung): also kein &amp;lt;code&amp;gt;apt-get update &amp;amp;&amp;amp; apt-get upgrade &amp;lt;/code&amp;gt;. Ebenso sollte man nicht mit automatischen Bestätigungen arbeiten, also kein upgrade mit &amp;quot;-y&amp;quot;. Nach einer Installation ist ein aufräumen immer gut, also:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get autoremove&lt;br /&gt;
apt-get clean&lt;br /&gt;
apt-get purge $(dpkg --get-selections | grep deinstall | cut -f1 | xargs)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Verwendung UART für Zusatzmodule====&lt;br /&gt;
Einige Aufsteckmodule (z.B. HM-MOD-RPI-PCB) für den GPIO Port verwenden die serielle Schnittstelle UART. Der Zugriff auf diese serielle Schnittstelle erfordert eine modellabhängige Konfiguration. Siehe auch [https://www.raspberrypi.com/documentation/computers/configuration.html Raspberry Pi Dokumentation]&lt;br /&gt;
&lt;br /&gt;
Bei allen Modellen muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# seriell-getty Dienst für ttyAMA0 dauerhaft deaktivieren&lt;br /&gt;
systemctl stop serial-getty@ttyAMA0.service&lt;br /&gt;
systemctl disable serial-getty@ttyAMA0.service&lt;br /&gt;
systemctl mask serial-getty@ttyAMA0.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Bei den Modellen mit Bluetooth muss die UART aktiviert und umkonfiguriert werden. Hier ein bash Script, welches die Originaldatei entsprechend modifiziert:&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Im aktuellen RaspberryPi OS Bookworm Image ist die config.txt in den Pfad /boot/firmware gewandert. Die alte Datei wurde durch einen Dummy ersetzt.&lt;br /&gt;
Verwendet man ein debian Image findet man Infos in {{Link2Forum|Topic=137496|Message=1307865|LinkText=diesem Forenbeitrag}}}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen&lt;br /&gt;
config=&amp;quot;/boot/firmware/config.txt&amp;quot;&lt;br /&gt;
# für Raspberry Pi OS vor Bookworm &lt;br /&gt;
# config=&amp;quot;/boot/config.txt&amp;quot;&lt;br /&gt;
# für Ubuntu&lt;br /&gt;
#config=&amp;quot;/boot/firmware/usercfg.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
bash -c &amp;quot;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; $config&lt;br /&gt;
enable_uart=1&lt;br /&gt;
dtoverlay=miniuart-bt&lt;br /&gt;
core_freq=250&lt;br /&gt;
EOF&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wer dem nicht traut, der editiert die Datei von Hand (Linux Editor!) und fügt am Ende die drei Zeilen aus dem Script ein, die vor EOF stehen.&lt;br /&gt;
&lt;br /&gt;
Die config Datei von ubuntu verwendet den Befehl include usercfg.txt. Mit Erscheinen des Pi 4 wurden die overlay Dateien umbenannt (Start mit Pi3- entfernt) die alten Namen funktionieren aber noch.&lt;br /&gt;
&lt;br /&gt;
Um die Konfiguration abzuschließen ist ein Neustart erforderlich&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;#Neustart erforderlich &lt;br /&gt;
reboot&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Troubleshooting====&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Das hat sich mit RaspberryPI OS Bookworm geändert, aktuell wird darüber ab {{Link2Forum|Topic=135864|Message=1294588|LinkText=diesem Forenbeitrag}} diskutiert.}} &lt;br /&gt;
&#039;&#039;&#039;Kontrolle der seriellen Schnittstelle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;ls -l /dev/ttyAMA0&amp;lt;/code&amp;gt; muss folgende Ausgabe liefern.&lt;br /&gt;
  crw-rw---- 1 root dialout 204, 64 Jun  7 22:56 /dev/ttyAMA0&lt;br /&gt;
Sollte dies nicht der Fall sein, muss der Dienst serial-getty@ttyAMA0.service deaktiviert werden!&lt;br /&gt;
&lt;br /&gt;
Kontrolle der Verlinkung von /dev/serial*&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;ls -l /dev/serial*&amp;lt;/code&amp;gt; muss folgende Ausgabe liefern.&lt;br /&gt;
* Bei Modellen mit BT und richtiger Konfiguration (funktioniert nur unter Raspberry Pi OS)&lt;br /&gt;
  lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -&amp;gt; ttyAMA0&lt;br /&gt;
  lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -&amp;gt; ttyS0&lt;br /&gt;
* Bei den Modellen ohne BT und richtiger Konfiguration&lt;br /&gt;
  lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -&amp;gt; ttyAMA0&lt;br /&gt;
Sollte das nicht der Fall sein, sind die Einträge in der /boot/config.txt fehlerhaft. &lt;br /&gt;
&lt;br /&gt;
Sollte die serielle Schnittstelle unerwartet nicht funktionieren, kann auch andere Software daran Schuld sein, weil diese einfach versucht, alle Schnittstellen abzufragen / zu initialisieren. Für die Fehlersuche ist es also wichtig zu wissen, welche Software so installiert wurde, speziell wenn diese serielle Schnitttstellen (USB) verwendet / verwenden will. Ein Beispiel (deconz/conbee) wird in {{Link2Forum|Topic=116428|Message=1107317|LinkText=diesem Forenbeitrag}} behandelt. &lt;br /&gt;
&lt;br /&gt;
Bei einem Raspberry 4 stört unter Umständen die Temperaturkontrolle des Lüfters, siehe auch Abschnitt bekannte Probleme: [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi]]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kontrolle Bluetooth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Funktion von Bluetooth kann mit dem hcitool überprüft werden. Mit &amp;lt;code&amp;gt;hcitool dev&amp;lt;/code&amp;gt; wird das interne BT Gerät mit MAC Adresse angezeigt. Mit &amp;lt;code&amp;gt;hcitool scan&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;hcitool lescan&amp;lt;/code&amp;gt; kann nach sichtbaren Geräten gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Weitergehende Informationen zur Anpassung der Konfiguration von Raspberry Pi OS sind nachzulesen auf https://www.raspberrypi.org/documentation/configuration/.&lt;br /&gt;
&lt;br /&gt;
Sollte die Bluetooth Schnittstelle nach der Installation von FHEM nicht funktionieren, hilft es den Dienst abhängig zu starten, siehe diesen Wiki Artikel [[Fhem.service (systemd unit file)]] &lt;br /&gt;
&lt;br /&gt;
=== FHEM ===&lt;br /&gt;
Die Installation von FHEM kann nach der Raspberry Pi OS Installation sehr einfach über das Debian-Repository [http://debian.fhem.de] erfolgen. &lt;br /&gt;
* Es wird unbedingt empfohlen zur Grundinstallation zunächst keine Module, USB Sticks oder ähnliche Zusatzbaugruppen an den IO Ports des Raspberry gesteckt zu haben. &lt;br /&gt;
* Dieser Abschnitt beschreibt nur die Grundinstallation von FHEM auf einem Raspberry Pi mit Raspberry Pi OS! &lt;br /&gt;
* Weitere Installationsschritte sind je nach verwendeten FHEM-Modulen notwendig. &lt;br /&gt;
** Informationen hierzu liefert üblicherweise die {{Link2CmdRef}} zum jeweiligen Modul.&lt;br /&gt;
** Den weiteren Einstieg in FHEM findet man im Artikel [[Quick-Start]]&lt;br /&gt;
&lt;br /&gt;
==== Der einfache Weg zum aktuellen System ====&lt;br /&gt;
Der folgende Befehlsblock ist die praktische Umsetzung der Beschreibung auf http://debian.fhem.de. Bitte unbedingt vor Installation rückversichern, ob es dort (insbesondere unter &#039;&#039;The easy way: use apt-get&#039;&#039;) Aktualisierungen gab. &lt;br /&gt;
* Dieser Befehlsblock erfordert erhöhte Rechte, also bitte als Erstes &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt; ausführen!&lt;br /&gt;
* Beim Kopieren aufpassen! Jede Zeile muss einzeln ausgeführt werden!&lt;br /&gt;
Dieser Befehlsblock gilt ab der Version &#039;&#039;debian buster&#039;&#039; als veraltet (es gibt Sicherheitsbedenken), muss aber bis einschließlich &#039;&#039;debian stretch&#039;&#039; eingesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/&lt;br /&gt;
wget -qO - https://debian.fhem.de/archive.key | apt-key add -&lt;br /&gt;
echo &amp;quot;deb http://debian.fhem.de/nightly/ /&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieser Befehlsblock funktioniert erst ab &#039;&#039;debian buster&#039;&#039; (erfordert erhöhte Rechte &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bei manchen debian Distributionen fehlt das Paket gpg -&amp;gt; nachinstallieren&lt;br /&gt;
apt update&lt;br /&gt;
apt install gpg&lt;br /&gt;
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/&lt;br /&gt;
wget -O- https://debian.fhem.de/archive.key | gpg --dearmor &amp;gt; /usr/share/keyrings/debianfhemde-archive-keyring.gpg&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/debianfhemde-archive-keyring.gpg] https://debian.fhem.de/nightly/ /&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Das offizielle Release ====&lt;br /&gt;
Man kann FHEM mit dem Debian-Paket von [https://fhem.de/#Installation fhem.de] installieren. Dieser Weg führt zu einem offiziellen Release, welches aber unter Umständen erheblich vom aktuellen Versions- und Diskussionsstand im Forum abweicht. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch den manuellen Weg von https://debian.fhem.de/ wählen.&lt;br /&gt;
&lt;br /&gt;
==== Empfohlener Patch ====&lt;br /&gt;
Da gerade auf dem Raspberry die automatische Erkennung der USB Schnittstellen zu 100% CPU Last führt (FHEM träge und reagiert nicht), wird empfohlen sofort nach der Installation noch diesen &amp;quot;Patch&amp;quot; auszuführen: FHEM starten, wenn alle USB-Geräte ausgesteckt sind. Dann &amp;lt;code&amp;gt;attr initialUsbCheck disable 1&amp;lt;/code&amp;gt; in der Kommandozeile in FHEMWEB eingeben, &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ausführen und FHEM anschließen wieder mit eingesteckten USB-Geräten neu starten.&lt;br /&gt;
&lt;br /&gt;
====Deinstallation====&lt;br /&gt;
Man kann FHEM auch wieder spurlos vom System entfernen und ganz von vorn beginnen. Allerdings sollte man sich im Klaren sein, damit ensteht kein jungfräuliches System!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get purge fhem&lt;br /&gt;
sudo apt-get autoremove&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zusatzpakete bei FHEM-Erst- und Zweitinstallation===&lt;br /&gt;
Nachdem der RPi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um das Grundgerüst von FHEM betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort, andere sind zur Nutzung bestimmter weiterer FHEM-Module (siehe {{Link2CmdRef}}) erforderlich. &lt;br /&gt;
&lt;br /&gt;
Hierzu wurden in letzter Zeit mehrere Hilfsmodule entwickelt, die insbesondere bei Wiederinstallation (etwa nach Absturz) wichtig sein können. So zeigt das Modul Installer die installierten Perl-Module an, siehe dazu {{Link2Forum|Topic=98381|LinkText=diesen Thread}}.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine frühere Installation auf einer anderen SD-Karte installieren möchte und nicht mehr weiß, welche Zusatzpakete man auf der alten Karte installiert hatte, hilft (diese und nachfolgende Hinweise sind aus dem Blog [https://heinz-otto.blogspot.com/2019/07/infos-zur-installation-von-modulen-und.html])&lt;br /&gt;
 zcat $(ls -tr /var/log/apt/history.log.*.gz)|grep -A1 Start-Date&lt;br /&gt;
weiter. Hier werden frühere Eingaben der Kommandozeile wiedergegeben. Es gibt einen analogen Befehl, um die mit CPAN installierten Pakete anzuzeigen. Dazu muss man das debian Paket perl-doc installiert haben und gibt dann ein&lt;br /&gt;
 for M in `perldoc -t perllocal|grep Module |sed -e &#039;s/^.*&amp;quot; //&#039;`; do V=`perldoc -t perllocal|awk &amp;quot;/$M/{y=1;next}y&amp;quot; |grep VERSION |head -n 1`; printf &amp;quot;%30s %s\n&amp;quot; &amp;quot;$M&amp;quot; &amp;quot;$V&amp;quot;; done |sort&lt;br /&gt;
Ebenso kann man herausfinden, ob und durch welches debian-Paket das Perl-Paket installiert wurde. Die zweite Version sucht nur in Paketen die -perl im Namen tragen und läuft damit wesentlich schneller:&lt;br /&gt;
 s=&#039;Device::SerialPort&#039; ## zu diesem Paket wird gesucht&lt;br /&gt;
 perl -M$s -e &#039;&#039; 2&amp;gt;/dev/null &amp;amp;&amp;amp;echo &amp;quot;Modul $s ist vorhanden&amp;quot;&#039;&#039;&lt;br /&gt;
 for i in $(dpkg -l |grep ^ii| awk &#039;{ print $2 }&#039;|tr -d &amp;quot;\r&amp;quot;|tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot;);do if dpkg -L $i|grep $s &amp;amp;&amp;gt; /dev/null;then echo $i enthält $s;fi;done&lt;br /&gt;
 for i in $(dpkg -l |grep ^ii|grep &#039;\-perl&#039;| awk &#039;{ print $2 }&#039;|tr -d &amp;quot;\r&amp;quot;|tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot;);do if dpkg -L $i|grep $s &amp;amp;&amp;gt; /dev/null;then echo $i enthält $s;fi;done&lt;br /&gt;
&lt;br /&gt;
Es gibt gute Gründe, die Installation von Perl Modulen über debian-Pakete der Installation über cpan zu bevorzugen. Dazu zählt die Updatefähigkeit und die Geschwindigkeit. Man kann im Internet nach den Paketen suchen, man kann aber auch einfach die Verfügbarkeit für das lokale System testen. Dazu braucht man das Tool apt-file, welches man zuerst installieren muss. Der letzte Befehl lädt den Infocache lokal und dauert etwas:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install apt-file&lt;br /&gt;
 sudo apt-file update&lt;br /&gt;
Die folgende Suche nutzt den Umstand, dass in der im Paket enthaltenen Liste der Dateien auch die Doku in der Form &amp;quot;/usr/share/man/man3/IO::File.3perl.gz&amp;quot; enthalten ist. Der search Befehl unten akzeptiert mehrere Modulnamen durch Zeilenumbruch getrennt. In dem Beispiel sind die Modulnamen in einem String durch Leerzeichen getrennt, die Trennung wird in Zeilenumbruch geändert, jede Zeile ergänzt und über stdin an den search Befehl von apt-file übergeben. Die Option -l bewirkt das nur die gefunden Pakete gelistet werden, werden mehrere der abgefragten Modulnamen in einem Paket gefunden, wird es nur einmal gelistet:&lt;br /&gt;
 s=&amp;quot;IO::File Digest::MD5&amp;quot; ##Such-String&lt;br /&gt;
 echo $s|tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot;|sed &#039;s/$/./;s/^/\//&#039;|apt-file search -l -f -&lt;br /&gt;
&lt;br /&gt;
Zuletzt eine Übersicht diverser Zusatzpakete.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; |Beschreibung&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; |Paketname&lt;br /&gt;
! style=&amp;quot;width:50%&amp;quot; |Kontext&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; |Installieren&lt;br /&gt;
|-&lt;br /&gt;
|Zeitserver &lt;br /&gt;
|ntpdate&lt;br /&gt;
| Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install ntpdate&lt;br /&gt;
sudo ntpdate -u de.pool.ntp.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Perl JSON&lt;br /&gt;
|JSON&lt;br /&gt;
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Samba-Server&lt;br /&gt;
|samba&lt;br /&gt;
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen. &lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install samba cifs-utils&amp;lt;/code&amp;gt;&lt;br /&gt;
Danach muss der share definiert werden mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mailversand&lt;br /&gt;
|sendemail (alt: sendEmail)&lt;br /&gt;
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.&lt;br /&gt;
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [[E-Mail senden#Raspberry Pi]]&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install sendemail&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;sudo apt-get install sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wake-on-LAN &lt;br /&gt;
|etherwake&lt;br /&gt;
|Wird z.B. für das Modul WOL benötigt.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install etherwake&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl Telnet&lt;br /&gt;
|telnet &lt;br /&gt;
|Wurde vor Fritz!OS 6.2x z.B. für das Modul [[FRITZBOX]] benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port ansprach. Mittlerweile wird TR-64 und SOAP verwendet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Socat &lt;br /&gt;
|socat&lt;br /&gt;
| Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;system(&amp;quot;echo &#039;set lampe on&#039; | /usr/bin/socat - TCP:1.2.3.4:7072&amp;quot;);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install socat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Libcrypt&lt;br /&gt;
| Libcrypt&lt;br /&gt;
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libcrypt-rijndael-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|libdatetime&lt;br /&gt;
|libdatetime&lt;br /&gt;
|Perl libdatetime, erforderlich für das Weather-Modul.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libdatetime-format-strptime-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|EnOcean XML functions&lt;br /&gt;
|libxml simple&lt;br /&gt;
|Perl XML::SIMPLE, erforderlich für die XML Funktionen des ENOCEAN Moduls.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libxml-simple-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|EnOcean Cryptographic functions&lt;br /&gt;
|libcrypt-random-source-perl&lt;br /&gt;
|Perl Crypt::Random, erforderlich für die Cryptographic Funktionen des ENOCEAN Moduls.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo /usr/bin/perl -MCPAN -e &#039;install Crypt::Random&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Netzteil===&lt;br /&gt;
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.&lt;br /&gt;
&lt;br /&gt;
===Kabel (Micro-USB)===&lt;br /&gt;
Auch das verwendete Kabel kann einen (großen) Unterschied machen. Billige Kabel haben sehr dünne Kupferadern, die auf größeren Strecken (bereits ab 30cm!) einen Spannungsabfall verursachen können, der sonst nicht nachvollziehbare Probleme (Festplattenausfall, SD-Kartenausfall etc.) auslöst. Siehe beispielsweise diesen Thread mit einer Tabelle, die die Höhe des Spannungsabfalls explizit beschreibt: [https://forum.fhem.de/index.php/topic,127508.0.html Link zum Forum]  &lt;br /&gt;
&lt;br /&gt;
===Echtzeituhr===&lt;br /&gt;
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] oder durch [[Raspberry Pi: RTC Hat|Installation einer Echtzeituhr]] umgangen.&lt;br /&gt;
&lt;br /&gt;
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die &amp;quot;alten&amp;quot; Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser. (siehe {{Link2Forum|Topic=70741}})&lt;br /&gt;
&lt;br /&gt;
===Last durch Backup (während update)===&lt;br /&gt;
Bei einen [[Update]] von FHEM durch den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; kann durch Setzen des Attributs &amp;quot;&amp;lt;code&amp;gt;attr global backup_before_update 1&amp;lt;/code&amp;gt;&amp;quot; automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein &amp;quot;&amp;lt;code&amp;gt;attr global updateInBackground 1&amp;lt;/code&amp;gt;&amp;quot; wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}). &lt;br /&gt;
&lt;br /&gt;
Alternative Möglichkeiten: &lt;br /&gt;
*Backup ausschalten und manuell durchführen&lt;br /&gt;
*Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren&lt;br /&gt;
&lt;br /&gt;
==Watchdog einrichten==&lt;br /&gt;
Man kann den RPi regelmäßig prüfen lassen, ob FHEM noch läuft und gegebenenfalls einen Neustart durchführen lassen. Eine mögliche Vorgehensweise ist in diesem {{Link2Forum|Topic=20553|LinkText=Forumsthema}} beschrieben.&lt;br /&gt;
{{Hinweis|Statt des Einsatzes derartiger Methoden ist zu empfehlen, nach der eigentliche Fehlerursache zu forschen und diese abzustellen. Haben Sie dennoch einen solchen Watchdog eingerichtet, sollten Sie bei Fragen zu Ihnen seltsam erscheinenden Phänomänen im Forum darauf hinweisen, auch wenn die Symptome scheinbar nichts mit dem Watchdog zu tun haben sollten.}}&lt;br /&gt;
&lt;br /&gt;
==Interne Links == &lt;br /&gt;
*[[CUL am Raspberry Pi flashen]]&lt;br /&gt;
*[[Raspberry Pi und 1-Wire]]&lt;br /&gt;
&lt;br /&gt;
==Externe Links== &lt;br /&gt;
*{{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2&lt;br /&gt;
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]&lt;br /&gt;
*[http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=39209</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=39209"/>
		<updated>2024-03-28T19:17:27Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Randnotiz zu attr initialUsbCheck disable 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim [[Raspberry Pi]] handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].&lt;br /&gt;
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspberry Pi OS Distribution (ab Mitte 2019 &#039;&#039;Buster&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Installation / Setup ==&lt;br /&gt;
=== Betriebssystem ===&lt;br /&gt;
====Vorbemerkung====&lt;br /&gt;
Raspberry Pi OS ist direkt bei raspberrybi.org unter https://www.raspberrypi.org/downloads/raspberry-pi-os/ herunterladbar. Die folgende Anleitung gilt für die lite-Version ohne grafischen Desktop und für die Modelle für B, B+, B2, B3, B3+, Zero W. (Stand Juni 2018)&lt;br /&gt;
&lt;br /&gt;
Alle in diesem Abschnitt verwendeten Code Blöcke benötigen root Rechte. Deshalb bitte immer am Besten im Kontext &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt; ausführen. Man kann auch einzelne Befehle mit sudo davor ausführen, allerdings wird die Berechtigung bei Pipe Befehlen nicht durchgereicht. Einige dieser Kommandos funktionieren in der angegebenen Form nicht unter der Wheezy-Version [https://en.wikipedia.org/wiki/Raspberry_Pi_OS#Release_history] des RPi OS. Läuft der betreffende RPi noch unter Wheezy, ist ein Upgrade des RPi OS empfehlenswert.&lt;br /&gt;
&lt;br /&gt;
Alle Dateien müssen im Linux-Format (nur LF als Zeilenende) erzeugt/editiert werden! Unbedingt einen geeigneten Editor verwenden und auf das Format beim Speichern achten!&lt;br /&gt;
&lt;br /&gt;
====SD-Karte vorbereiten====&lt;br /&gt;
Die heruntergeladene Datei muss entpackt und auf die Speicherkarte geschrieben werden. Es gibt dazu verschiedene Tools je nach Betriebssystem. Für Windows ist windisk32imager zu empfehlen, Projektseite [https://sourceforge.net/projects/win32diskimager/]. Für Mac OS gibt es den Pi Filler.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Anleitungen zur Vorgehensweise finden sich für die Betriebssysteme Linux, Mac OS und Windows unter [https://www.raspberrypi.org/documentation/installation/installing-images/README.md Writing an image to the SD card]&lt;br /&gt;
&lt;br /&gt;
Die SD Card enthält nun zwei Partitionen/Laufwerke, wobei das erste Laufwerk unter alle Betriebssystemen lesbar ist. In diesem Laufwerk (/boot) müssen jetzt noch zwei Dateien erzeugt werden:&lt;br /&gt;
* eine leere Datei mit dem Namen ssh, um den (headless) Zugriff per ssh zu ermöglichen (Pi Filler macht dies automatisch). Hinweis: Eine spätere Aktivierung von SSH ist mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; (Punkt 5 &amp;quot;Interfacing Options&amp;quot;, dann Punkt 2 SSH) möglich, erfordert dann aber Tastatur und Monitor am RPi.&lt;br /&gt;
* eine Textdatei im Linux Format mit Namen wpa_supplicant.conf und folgendem Inhalt, wenn der Pi sofort mit WLAN starten soll.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;country=DE&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
network={&lt;br /&gt;
        ssid=&amp;quot;FRITZ!Box 7490&amp;quot;&lt;br /&gt;
        psk=&amp;quot;12345678901234567890&amp;quot; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* SD Karte auswerfen.&lt;br /&gt;
* SD Karte in Raspberry Pi stecken und booten.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann auch Monitor und Tastatur verwendet werden.&lt;br /&gt;
&lt;br /&gt;
====Anmeldung und Grundkonfiguration====&lt;br /&gt;
Default raspberrypi-os: Host raspberrypi, User pi, Passwort raspberry &lt;br /&gt;
&lt;br /&gt;
Default ubuntu: Host ubuntu, User ubuntu, Passwort ubuntu&lt;br /&gt;
&lt;br /&gt;
Anmeldung entweder lokal oder mit dem Befehl: ssh &amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Passwort sollte geändert werden, dazu dem Sicherheitshinweis folgen und &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
Alle unten genannten Befehle müssen mit erhöhten Rechten ausgeführt werden (z. B. sudo)!&lt;br /&gt;
&lt;br /&gt;
Als Erstes sollte: Zeitzone, Sprache und  Hostname angepasst werden. &lt;br /&gt;
Entweder Menügeführt mit &amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt; &lt;br /&gt;
oder per Script / Shell Befehle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Zeitzone einstellen &amp;amp; Zeitsynchronisierung über das Internet aktivieren&lt;br /&gt;
timedatectl set-timezone Europe/Berlin&lt;br /&gt;
timedatectl set-ntp true&lt;br /&gt;
&lt;br /&gt;
# Konfigurieren lokale Sprache deutsch&lt;br /&gt;
sed -i -e &#039;s/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/&#039; /etc/locale.gen&lt;br /&gt;
locale-gen&lt;br /&gt;
localectl set-locale LANG=de_DE.UTF-8 LANGUAGE=de_DE&lt;br /&gt;
&lt;br /&gt;
# Hostname &lt;br /&gt;
hostnamectl set-hostname mymachine&lt;br /&gt;
&lt;br /&gt;
# System aktualisieren &lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
#Neustart&lt;br /&gt;
reboot&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Anfang sollte man Befehle nicht verketten, sondern immer auf die Ausgabe warten (es sei denn, man hat Erfahrung): also kein &amp;lt;code&amp;gt;apt-get update &amp;amp;&amp;amp; apt-get upgrade &amp;lt;/code&amp;gt;. Ebenso sollte man nicht mit automatischen Bestätigungen arbeiten, also kein upgrade mit &amp;quot;-y&amp;quot;. Nach einer Installation ist ein aufräumen immer gut, also:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get autoremove&lt;br /&gt;
apt-get clean&lt;br /&gt;
apt-get purge $(dpkg --get-selections | grep deinstall | cut -f1 | xargs)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Verwendung UART für Zusatzmodule====&lt;br /&gt;
Einige Aufsteckmodule (z.B. HM-MOD-RPI-PCB) für den GPIO Port verwenden die serielle Schnittstelle UART. Der Zugriff auf diese serielle Schnittstelle erfordert eine modellabhängige Konfiguration. Siehe auch [https://www.raspberrypi.com/documentation/computers/configuration.html Raspberry Pi Dokumentation]&lt;br /&gt;
&lt;br /&gt;
Bei allen Modellen muss die Verwendung der seriellen Linux console an ttyAMA0 deaktiviert werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# seriell-getty Dienst für ttyAMA0 dauerhaft deaktivieren&lt;br /&gt;
systemctl stop serial-getty@ttyAMA0.service&lt;br /&gt;
systemctl disable serial-getty@ttyAMA0.service&lt;br /&gt;
systemctl mask serial-getty@ttyAMA0.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Bei den Modellen mit Bluetooth muss die UART aktiviert und umkonfiguriert werden. Hier ein bash Script, welches die Originaldatei entsprechend modifiziert:&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Im aktuellen RaspberryPi OS Bookworm Image ist die config.txt in den Pfad /boot/firmware gewandert. Die alte Datei wurde durch einen Dummy ersetzt.&lt;br /&gt;
Verwendet man ein debian Image findet man Infos in {{Link2Forum|Topic=137496|Message=1307865|LinkText=diesem Forenbeitrag}}}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# serielle Schnittstelle aktivieren und mit BT Schnittstelle tauschen&lt;br /&gt;
config=&amp;quot;/boot/firmware/config.txt&amp;quot;&lt;br /&gt;
# für Raspberry Pi OS vor Bookworm &lt;br /&gt;
# config=&amp;quot;/boot/config.txt&amp;quot;&lt;br /&gt;
# für Ubuntu&lt;br /&gt;
#config=&amp;quot;/boot/firmware/usercfg.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
bash -c &amp;quot;cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; $config&lt;br /&gt;
enable_uart=1&lt;br /&gt;
dtoverlay=miniuart-bt&lt;br /&gt;
core_freq=250&lt;br /&gt;
EOF&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wer dem nicht traut, der editiert die Datei von Hand (Linux Editor!) und fügt am Ende die drei Zeilen aus dem Script ein, die vor EOF stehen.&lt;br /&gt;
&lt;br /&gt;
Die config Datei von ubuntu verwendet den Befehl include usercfg.txt. Mit Erscheinen des Pi 4 wurden die overlay Dateien umbenannt (Start mit Pi3- entfernt) die alten Namen funktionieren aber noch.&lt;br /&gt;
&lt;br /&gt;
Um die Konfiguration abzuschließen ist ein Neustart erforderlich&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;#Neustart erforderlich &lt;br /&gt;
reboot&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Troubleshooting====&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Das hat sich mit RaspberryPI OS Bookworm geändert, aktuell wird darüber ab {{Link2Forum|Topic=135864|Message=1294588|LinkText=diesem Forenbeitrag}} diskutiert.}} &lt;br /&gt;
&#039;&#039;&#039;Kontrolle der seriellen Schnittstelle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;ls -l /dev/ttyAMA0&amp;lt;/code&amp;gt; muss folgende Ausgabe liefern.&lt;br /&gt;
  crw-rw---- 1 root dialout 204, 64 Jun  7 22:56 /dev/ttyAMA0&lt;br /&gt;
Sollte dies nicht der Fall sein, muss der Dienst serial-getty@ttyAMA0.service deaktiviert werden!&lt;br /&gt;
&lt;br /&gt;
Kontrolle der Verlinkung von /dev/serial*&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;ls -l /dev/serial*&amp;lt;/code&amp;gt; muss folgende Ausgabe liefern.&lt;br /&gt;
* Bei Modellen mit BT und richtiger Konfiguration (funktioniert nur unter Raspberry Pi OS)&lt;br /&gt;
  lrwxrwxrwx 1 root root 7 Jun  7 22:55 /dev/serial0 -&amp;gt; ttyAMA0&lt;br /&gt;
  lrwxrwxrwx 1 root root 5 Jun  7 22:55 /dev/serial1 -&amp;gt; ttyS0&lt;br /&gt;
* Bei den Modellen ohne BT und richtiger Konfiguration&lt;br /&gt;
  lrwxrwxrwx 1 root root 7 Jun  8 18:30 /dev/serial0 -&amp;gt; ttyAMA0&lt;br /&gt;
Sollte das nicht der Fall sein, sind die Einträge in der /boot/config.txt fehlerhaft. &lt;br /&gt;
&lt;br /&gt;
Sollte die serielle Schnittstelle unerwartet nicht funktionieren, kann auch andere Software daran Schuld sein, weil diese einfach versucht, alle Schnittstellen abzufragen / zu initialisieren. Für die Fehlersuche ist es also wichtig zu wissen, welche Software so installiert wurde, speziell wenn diese serielle Schnitttstellen (USB) verwendet / verwenden will. Ein Beispiel (deconz/conbee) wird in {{Link2Forum|Topic=116428|Message=1107317|LinkText=diesem Forenbeitrag}} behandelt. &lt;br /&gt;
&lt;br /&gt;
Bei einem Raspberry 4 stört unter Umständen die Temperaturkontrolle des Lüfters, siehe auch Abschnitt bekannte Probleme: [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi]]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kontrolle Bluetooth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Funktion von Bluetooth kann mit dem hcitool überprüft werden. Mit &amp;lt;code&amp;gt;hcitool dev&amp;lt;/code&amp;gt; wird das interne BT Gerät mit MAC Adresse angezeigt. Mit &amp;lt;code&amp;gt;hcitool scan&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;hcitool lescan&amp;lt;/code&amp;gt; kann nach sichtbaren Geräten gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Weitergehende Informationen zur Anpassung der Konfiguration von Raspberry Pi OS sind nachzulesen auf https://www.raspberrypi.org/documentation/configuration/.&lt;br /&gt;
&lt;br /&gt;
Sollte die Bluetooth Schnittstelle nach der Installation von FHEM nicht funktionieren, hilft es den Dienst abhängig zu starten, siehe diesen Wiki Artikel [[Fhem.service (systemd unit file)]] &lt;br /&gt;
&lt;br /&gt;
=== FHEM ===&lt;br /&gt;
Die Installation von FHEM kann nach der Raspberry Pi OS Installation sehr einfach über das Debian-Repository [http://debian.fhem.de] erfolgen. &lt;br /&gt;
* Es wird unbedingt empfohlen zur Grundinstallation zunächst keine Module, USB Sticks oder ähnliche Zusatzbaugruppen an den IO Ports des Raspberry gesteckt zu haben. &lt;br /&gt;
* Dieser Abschnitt beschreibt nur die Grundinstallation von FHEM auf einem Raspberry Pi mit Raspberry Pi OS! &lt;br /&gt;
* Weitere Installationsschritte sind je nach verwendeten FHEM-Modulen notwendig. &lt;br /&gt;
** Informationen hierzu liefert üblicherweise die {{Link2CmdRef}} zum jeweiligen Modul.&lt;br /&gt;
** Den weiteren Einstieg in FHEM findet man im Artikel [[Quick-Start]]&lt;br /&gt;
&lt;br /&gt;
==== Der einfache Weg zum aktuellen System ====&lt;br /&gt;
Der folgende Befehlsblock ist die praktische Umsetzung der Beschreibung auf http://debian.fhem.de. Bitte unbedingt vor Installation rückversichern, ob es dort (insbesondere unter &#039;&#039;The easy way: use apt-get&#039;&#039;) Aktualisierungen gab. &lt;br /&gt;
* Dieser Befehlsblock erfordert erhöhte Rechte, also bitte als Erstes &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt; ausführen!&lt;br /&gt;
* Beim Kopieren aufpassen! Jede Zeile muss einzeln ausgeführt werden!&lt;br /&gt;
Dieser Befehlsblock gilt ab der Version &#039;&#039;debian buster&#039;&#039; als veraltet (es gibt Sicherheitsbedenken), muss aber bis einschließlich &#039;&#039;debian stretch&#039;&#039; eingesetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/&lt;br /&gt;
wget -qO - https://debian.fhem.de/archive.key | apt-key add -&lt;br /&gt;
echo &amp;quot;deb http://debian.fhem.de/nightly/ /&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieser Befehlsblock funktioniert erst ab &#039;&#039;debian buster&#039;&#039; (erfordert erhöhte Rechte &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bei manchen debian Distributionen fehlt das Paket gpg -&amp;gt; nachinstallieren&lt;br /&gt;
apt update&lt;br /&gt;
apt install gpg&lt;br /&gt;
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/&lt;br /&gt;
wget -O- https://debian.fhem.de/archive.key | gpg --dearmor &amp;gt; /usr/share/keyrings/debianfhemde-archive-keyring.gpg&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/debianfhemde-archive-keyring.gpg] https://debian.fhem.de/nightly/ /&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Das offizielle Release ====&lt;br /&gt;
Man kann FHEM mit dem Debian-Paket von [https://fhem.de/#Installation fhem.de] installieren. Dieser Weg führt zu einem offiziellen Release, welches aber unter Umständen erheblich vom aktuellen Versions- und Diskussionsstand im Forum abweicht. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch den manuellen Weg von https://debian.fhem.de/ wählen.&lt;br /&gt;
&lt;br /&gt;
==== Empfohlener Patch ====&lt;br /&gt;
Da gerade auf dem Raspberry die automatische Erkennung der USB Schnittstellen zu 100% CPU Last führt (FHEM träge und reagiert nicht), wird empfohlen sofort nach der Installation noch diesen &amp;quot;Patch&amp;quot; auszuführen: FHEM starten, wenn alle USB-Geräte ausgesteckt sind. Dann &amp;lt;code&amp;gt;attr initialUsbCheck disable 1&amp;lt;/code&amp;gt; in der Kommandozeile in FHEMWEB eingeben, &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ausführen und FHEM anschließen wieder mit eingesteckten USB-Geräten neu starten.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Gibt es in neueren FHEM-Versionen überhaupt noch initialUsbCheck?}}&lt;br /&gt;
&lt;br /&gt;
==== Deinstallation ====&lt;br /&gt;
Man kann FHEM auch wieder spurlos vom System entfernen und ganz von vorn beginnen. Allerdings sollte man sich im Klaren sein, damit ensteht kein jungfräuliches System!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get purge fhem&lt;br /&gt;
sudo apt-get autoremove&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zusatzpakete bei FHEM-Erst- und Zweitinstallation ===&lt;br /&gt;
Nachdem der RPi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um das Grundgerüst von FHEM betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort, andere sind zur Nutzung bestimmter weiterer FHEM-Module (siehe {{Link2CmdRef}}) erforderlich. &lt;br /&gt;
&lt;br /&gt;
Hierzu wurden in letzter Zeit mehrere Hilfsmodule entwickelt, die insbesondere bei Wiederinstallation (etwa nach Absturz) wichtig sein können. So zeigt das Modul Installer die installierten Perl-Module an, siehe dazu {{Link2Forum|Topic=98381|LinkText=diesen Thread}}.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine frühere Installation auf einer anderen SD-Karte installieren möchte und nicht mehr weiß, welche Zusatzpakete man auf der alten Karte installiert hatte, hilft (diese und nachfolgende Hinweise sind aus dem Blog [https://heinz-otto.blogspot.com/2019/07/infos-zur-installation-von-modulen-und.html])&lt;br /&gt;
 zcat $(ls -tr /var/log/apt/history.log.*.gz)|grep -A1 Start-Date&lt;br /&gt;
weiter. Hier werden frühere Eingaben der Kommandozeile wiedergegeben. Es gibt einen analogen Befehl, um die mit CPAN installierten Pakete anzuzeigen. Dazu muss man das debian Paket perl-doc installiert haben und gibt dann ein&lt;br /&gt;
 for M in `perldoc -t perllocal|grep Module |sed -e &#039;s/^.*&amp;quot; //&#039;`; do V=`perldoc -t perllocal|awk &amp;quot;/$M/{y=1;next}y&amp;quot; |grep VERSION |head -n 1`; printf &amp;quot;%30s %s\n&amp;quot; &amp;quot;$M&amp;quot; &amp;quot;$V&amp;quot;; done |sort&lt;br /&gt;
Ebenso kann man herausfinden, ob und durch welches debian-Paket das Perl-Paket installiert wurde. Die zweite Version sucht nur in Paketen die -perl im Namen tragen und läuft damit wesentlich schneller:&lt;br /&gt;
 s=&#039;Device::SerialPort&#039; ## zu diesem Paket wird gesucht&lt;br /&gt;
 perl -M$s -e &#039;&#039; 2&amp;gt;/dev/null &amp;amp;&amp;amp;echo &amp;quot;Modul $s ist vorhanden&amp;quot;&#039;&#039;&lt;br /&gt;
 for i in $(dpkg -l |grep ^ii| awk &#039;{ print $2 }&#039;|tr -d &amp;quot;\r&amp;quot;|tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot;);do if dpkg -L $i|grep $s &amp;amp;&amp;gt; /dev/null;then echo $i enthält $s;fi;done&lt;br /&gt;
 for i in $(dpkg -l |grep ^ii|grep &#039;\-perl&#039;| awk &#039;{ print $2 }&#039;|tr -d &amp;quot;\r&amp;quot;|tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot;);do if dpkg -L $i|grep $s &amp;amp;&amp;gt; /dev/null;then echo $i enthält $s;fi;done&lt;br /&gt;
&lt;br /&gt;
Es gibt gute Gründe, die Installation von Perl Modulen über debian-Pakete der Installation über cpan zu bevorzugen. Dazu zählt die Updatefähigkeit und die Geschwindigkeit. Man kann im Internet nach den Paketen suchen, man kann aber auch einfach die Verfügbarkeit für das lokale System testen. Dazu braucht man das Tool apt-file, welches man zuerst installieren muss. Der letzte Befehl lädt den Infocache lokal und dauert etwas:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install apt-file&lt;br /&gt;
 sudo apt-file update&lt;br /&gt;
Die folgende Suche nutzt den Umstand, dass in der im Paket enthaltenen Liste der Dateien auch die Doku in der Form &amp;quot;/usr/share/man/man3/IO::File.3perl.gz&amp;quot; enthalten ist. Der search Befehl unten akzeptiert mehrere Modulnamen durch Zeilenumbruch getrennt. In dem Beispiel sind die Modulnamen in einem String durch Leerzeichen getrennt, die Trennung wird in Zeilenumbruch geändert, jede Zeile ergänzt und über stdin an den search Befehl von apt-file übergeben. Die Option -l bewirkt das nur die gefunden Pakete gelistet werden, werden mehrere der abgefragten Modulnamen in einem Paket gefunden, wird es nur einmal gelistet:&lt;br /&gt;
 s=&amp;quot;IO::File Digest::MD5&amp;quot; ##Such-String&lt;br /&gt;
 echo $s|tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot;|sed &#039;s/$/./;s/^/\//&#039;|apt-file search -l -f -&lt;br /&gt;
&lt;br /&gt;
Zuletzt eine Übersicht diverser Zusatzpakete.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Paketname&lt;br /&gt;
! style=&amp;quot;width:50%&amp;quot; | Kontext&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; | Installieren&lt;br /&gt;
|-&lt;br /&gt;
|Zeitserver&lt;br /&gt;
|ntpdate&lt;br /&gt;
|Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install ntpdate&lt;br /&gt;
sudo ntpdate -u de.pool.ntp.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl JSON&lt;br /&gt;
|JSON&lt;br /&gt;
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Samba-Server&lt;br /&gt;
|samba&lt;br /&gt;
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install samba cifs-utils&amp;lt;/code&amp;gt;&lt;br /&gt;
Danach muss der share definiert werden mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Mailversand&lt;br /&gt;
|sendemail (alt: sendEmail)&lt;br /&gt;
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.&lt;br /&gt;
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [[E-Mail senden#Raspberry Pi]]&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install sendemail&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;sudo apt-get install sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wake-on-LAN&lt;br /&gt;
|etherwake&lt;br /&gt;
|Wird z.B. für das Modul WOL benötigt.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install etherwake&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl Telnet&lt;br /&gt;
|telnet&lt;br /&gt;
|Wurde vor Fritz!OS 6.2x z.B. für das Modul [[FRITZBOX]] benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port ansprach. Mittlerweile wird TR-64 und SOAP verwendet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Socat&lt;br /&gt;
|socat&lt;br /&gt;
|Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;system(&amp;quot;echo &#039;set lampe on&#039; | /usr/bin/socat - TCP:1.2.3.4:7072&amp;quot;);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install socat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libcrypt-rijndael-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|libdatetime&lt;br /&gt;
|libdatetime&lt;br /&gt;
|Perl libdatetime, erforderlich für das Weather-Modul.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libdatetime-format-strptime-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|EnOcean XML functions&lt;br /&gt;
|libxml simple&lt;br /&gt;
|Perl XML::SIMPLE, erforderlich für die XML Funktionen des ENOCEAN Moduls.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libxml-simple-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|EnOcean Cryptographic functions&lt;br /&gt;
|libcrypt-random-source-perl&lt;br /&gt;
|Perl Crypt::Random, erforderlich für die Cryptographic Funktionen des ENOCEAN Moduls.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo /usr/bin/perl -MCPAN -e &#039;install Crypt::Random&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Netzteil ===&lt;br /&gt;
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Kabel (Micro-USB) ===&lt;br /&gt;
Auch das verwendete Kabel kann einen (großen) Unterschied machen. Billige Kabel haben sehr dünne Kupferadern, die auf größeren Strecken (bereits ab 30cm!) einen Spannungsabfall verursachen können, der sonst nicht nachvollziehbare Probleme (Festplattenausfall, SD-Kartenausfall etc.) auslöst. Siehe beispielsweise diesen Thread mit einer Tabelle, die die Höhe des Spannungsabfalls explizit beschreibt: [https://forum.fhem.de/index.php/topic,127508.0.html Link zum Forum]  &lt;br /&gt;
&lt;br /&gt;
=== Echtzeituhr ===&lt;br /&gt;
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] oder durch [[Raspberry Pi: RTC Hat|Installation einer Echtzeituhr]] umgangen.&lt;br /&gt;
&lt;br /&gt;
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die &amp;quot;alten&amp;quot; Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser. (siehe {{Link2Forum|Topic=70741}})&lt;br /&gt;
&lt;br /&gt;
=== Last durch Backup (während update) ===&lt;br /&gt;
Bei einen [[Update]] von FHEM durch den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; kann durch Setzen des Attributs &amp;quot;&amp;lt;code&amp;gt;attr global backup_before_update 1&amp;lt;/code&amp;gt;&amp;quot; automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein &amp;quot;&amp;lt;code&amp;gt;attr global updateInBackground 1&amp;lt;/code&amp;gt;&amp;quot; wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}). &lt;br /&gt;
&lt;br /&gt;
Alternative Möglichkeiten: &lt;br /&gt;
* Backup ausschalten und manuell durchführen &lt;br /&gt;
* Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren&lt;br /&gt;
&lt;br /&gt;
== Watchdog einrichten ==&lt;br /&gt;
Man kann den RPi regelmäßig prüfen lassen, ob FHEM noch läuft und gegebenenfalls einen Neustart durchführen lassen. Eine mögliche Vorgehensweise ist in diesem {{Link2Forum|Topic=20553|LinkText=Forumsthema}} beschrieben.&lt;br /&gt;
{{Hinweis|Statt des Einsatzes derartiger Methoden ist zu empfehlen, nach der eigentliche Fehlerursache zu forschen und diese abzustellen. Haben Sie dennoch einen solchen Watchdog eingerichtet, sollten Sie bei Fragen zu Ihnen seltsam erscheinenden Phänomänen im Forum darauf hinweisen, auch wenn die Symptome scheinbar nichts mit dem Watchdog zu tun haben sollten.}}&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* [[CUL am Raspberry Pi flashen]]&lt;br /&gt;
* [[Raspberry Pi und 1-Wire]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2&lt;br /&gt;
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]&lt;br /&gt;
* [http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=38635</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=38635"/>
		<updated>2023-10-02T09:07:21Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrektur attr actualTemp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
| Bild = ITRV.jpg&lt;br /&gt;
| Bildbeschreibung = Batterieloser Heizungssteller&lt;br /&gt;
| HWProtocol = EnOcean&lt;br /&gt;
| HWType = Aktor&lt;br /&gt;
| HWCategory = EnOcean&lt;br /&gt;
| HWComm = EnOcean Funk, 868Mhz&lt;br /&gt;
| HWProtokoll = EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
| HWChannels = 1 (bidirektional)&lt;br /&gt;
| HWVoltage = 3.2 V, LiFePo-Akku&lt;br /&gt;
| HWPowerConsumption = unbekannt&lt;br /&gt;
| HWPoweredBy = TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
| HWSize = 59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
neuere, runde Modelle: 55 x 95 [mm] (Ø x T), 260 g&lt;br /&gt;
| HWDeviceFHEM = [http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
| HWManufacturer = Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung, der seine Energie per Energy Harvesting aus der Wärme des Vorlaufes zieht. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Aktuell in der Auslieferung sind die Modelle MVA-008 (wie 004) und MVA-009 (wie 005) mit einer USB-Buchse zum Nachladen, falls der eingebaute Speicher leergelaufen sein sollte. &lt;br /&gt;
&lt;br /&gt;
Neben der hier beschriebenen EnOcean-Variante gibt es auch Modelle für LoRaWan.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 ff. im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...40||Soll-Temperatur für den FHEM-PID-Controler: der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...40||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|feedTemp&lt;br /&gt;
|32.5&lt;br /&gt;
|&lt;br /&gt;
|Die Modelle ab 004 haben einen zweiten Thermofühler, der verlässlich die Vorlauftemperatur am Ventilsitz misst und zur Steuerung des eingebauten PID-Controlers herangezogen wird.&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState|||| processing |alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne Temperatur: wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||Modelle &amp;gt;004: A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actualTemp&lt;br /&gt;
|biDir&lt;br /&gt;
|t/°C&lt;br /&gt;
|Festlegung eines Raumfühler oder einer Steuereinheit, der die konkrete Temperatur angibt. Wird dann im Status des Device genannt. Ist dieses Attribut nicht gesetzt, wird bei Modellen &amp;gt;004 die von Aktor gemeldete Temperatur verwendet. Beim 004 wird das Reading temperature von setpointRefDev verwendet &lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|pidDeltaTreshold&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|Minimale Veränderung der Aktorstellung in Prozent&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; bei MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor &#039;&#039;&#039;dead&#039;&#039;&#039; oder &#039;&#039;&#039;no Response from actuator&#039;&#039;&#039; kann man im Betrieb mit einem externen Sensor verhindern, indem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
Die neueren Modelle beginnen nach einer sehr langen Sommerpause bei leerem Akku schon nach wenigen Minuten mit Vorlauftemperaturen um 30 Grad wieder ihren Betrieb alleine mit dem Strom, den der kleine Thermo-Generator erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Optimierungstipps, um möglichst wenig Energie im Aktor zu verbrauchen: Sommerbetrieb und Filtern von Sollwert-Verstellungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=38612</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=38612"/>
		<updated>2023-09-29T08:42:10Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Weitere Modelle erwähnt, kleinere ERgänzungen und Präzisierungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
| Bild = ITRV.jpg&lt;br /&gt;
| Bildbeschreibung = Batterieloser Heizungssteller&lt;br /&gt;
| HWProtocol = EnOcean&lt;br /&gt;
| HWType = Aktor&lt;br /&gt;
| HWCategory = EnOcean&lt;br /&gt;
| HWComm = EnOcean Funk, 868Mhz&lt;br /&gt;
| HWProtokoll = EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
| HWChannels = 1 (bidirektional)&lt;br /&gt;
| HWVoltage = 3.2 V, LiFePo-Akku&lt;br /&gt;
| HWPowerConsumption = unbekannt&lt;br /&gt;
| HWPoweredBy = TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
| HWSize = 59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
neuere, runde Modelle: 55 x 95 [mm] (Ø x T), 260 g&lt;br /&gt;
| HWDeviceFHEM = [http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
| HWManufacturer = Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung, der seine Energie per Energy Harvesting aus der Wärme des Vorlaufes zieht. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Aktuell in der Auslieferung sind die Modelle MVA-008 (wie 004) und MVA-009 (wie 005) mit einer USB-Buchse zum Nachladen, falls der eingebaute Speicher leergelaufen sein sollte. &lt;br /&gt;
&lt;br /&gt;
Neben der hier beschriebenen EnOcean-Variante gibt es auch Modelle für LoRaWan.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 ff. im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...40||Soll-Temperatur für den FHEM-PID-Controler: der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...40||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|feedTemp&lt;br /&gt;
|32.5&lt;br /&gt;
|&lt;br /&gt;
|Die Modelle ab 004 haben einen zweiten Thermofühler, der verlässlich die Vorlauftemperatur am Ventilsitz misst und zur Steuerung des eingebauten PID-Controlers herangezogen wird.&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState|||| processing |alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne Temperatur: wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||Modelle &amp;gt;004: A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actualTemp&lt;br /&gt;
|biDir&lt;br /&gt;
|&lt;br /&gt;
|bei Modellen &amp;gt;004 externer Temperatursensor als Referenz für die interne PID-Regelung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|pidDeltaTreshold&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|Minimale Veränderung der Aktorstellung in Prozent&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; bei MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor &#039;&#039;&#039;dead&#039;&#039;&#039; oder &#039;&#039;&#039;no Response from actuator&#039;&#039;&#039; kann man im Betrieb mit einem externen Sensor verhindern, indem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
Die neueren Modelle beginnen nach einer sehr langen Sommerpause bei leerem Akku schon nach wenigen Minuten mit Vorlauftemperaturen um 30 Grad wieder ihren Betrieb alleine mit dem Strom, den der kleine Thermo-Generator erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Optimierungstipps, um möglichst wenig Energie im Aktor zu verbrauchen: Sommerbetrieb und Filtern von Sollwert-Verstellungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Set_magic&amp;diff=38531</id>
		<title>Set magic</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Set_magic&amp;diff=38531"/>
		<updated>2023-08-07T08:40:07Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: ReadingsVal durch ReadingsNum ersetzt, weil in den Parametern die 0 schon als Zahl eingetragen wurde und es um eine numerische Operation geht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Begriff ==&lt;br /&gt;
Der Begriff [[set magic]]&amp;lt;ref&amp;gt;{{Link2Forum|Topic=38276|LinkText=Einfache Angabe von Reading-Values in notify Commands}}&amp;lt;/ref&amp;gt; steht für die besondere Schreibweise einer Funktion zum Auslesen von [[Gerätevariable|Gerätevariablen]] im Argument einiger FHEM-Befehle. Er ist im Zusammenhang mit der Entstehung dieser Schreibweise geprägt worden.&lt;br /&gt;
&lt;br /&gt;
== Verwendungsbereich ==&lt;br /&gt;
Die Schreibweise steht seit Featurelevel 5.7 zur Verfügung.&lt;br /&gt;
[[set magic]] kann verwendet werden für die Befehle&lt;br /&gt;
* set&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=set|Lang=de}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* setreading&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=setreading|Lang=de}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
und als Sonderfälle für&lt;br /&gt;
* [[attr]]&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=attr|Lang=de}}&amp;lt;/ref&amp;gt; stateFormat&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=stateFormat|Lang=de}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[attr]] wu_dataValues im [[Modul]] [[HP1000]]&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=HP1000|Lang=de}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
dazu zählen auch [[Modul|Module]], die Teile der Syntax verwenden&lt;br /&gt;
* [[readingsGroup]]&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=readingsGroup|Lang=de}}&amp;lt;/ref&amp;gt; verwendet Präfix und Suffix&lt;br /&gt;
oder [[Modul|Module]] mit einer erweiterten Anwendung&lt;br /&gt;
* [[DOIF]]&amp;lt;ref&amp;gt;{{Link2CmdRef|Anker=DOIF|Lang=de}}&amp;lt;/ref&amp;gt; inhaltliche und funktionale Erweiterungen, wie [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Ausl.C3.B6ser|Auslöser]]&lt;br /&gt;
[[set magic]] vereinfacht Schreibweisen wie&lt;br /&gt;
  {fhem(&amp;quot;setreading &amp;lt;Gerätename&amp;gt; &amp;lt;Readingname&amp;gt; &amp;quot;.ReadingsNum(&amp;quot;&amp;lt;Gerätename&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Readingname&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Defaultwert&amp;gt;&amp;quot;))}&lt;br /&gt;
zu&lt;br /&gt;
  setreading &amp;lt;Gerätename&amp;gt; &amp;lt;Readingname&amp;gt; [&amp;lt;Gerätename&amp;gt;:&amp;lt;Readingname&amp;gt;:d]&lt;br /&gt;
&lt;br /&gt;
== Syntax 1 ==&lt;br /&gt;
  [&amp;lt;Präfix&amp;gt;:&amp;lt;Gerätename&amp;gt;:&amp;lt;Name des [[Gerätevariable]]&amp;gt;:&amp;lt;Suffix&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Der optionale Präfix schränkt die Suche auf bestimmte [[Gerätevariable|Gerätevariablen]] ein.&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039; beschränkt die Suche auf [[Attribute]]&lt;br /&gt;
* &#039;&#039;&#039;i&#039;&#039;&#039; beschränkt die Suche auf [[Internals]]&lt;br /&gt;
* &#039;&#039;&#039;r&#039;&#039;&#039; beschränkt die Suche auf [[Readings]]&lt;br /&gt;
&lt;br /&gt;
Es muss ein gültiger [[Gerätename]] für ein existierendes Gerät angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Es muss eine existierende, nicht leere [[Gerätevariable]] angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der optionale Suffix extrahiert bestimmte Werte der [[Gerätevariable|Gerätevariablen]].&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039; extrahiert die erste Zahl.&lt;br /&gt;
* &#039;&#039;&#039;i&#039;&#039;&#039; extrahiert die erste Zahl als Ganzzahl.&lt;br /&gt;
* &#039;&#039;&#039;r&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;n&#039;&#039;&#039;&amp;gt; extrahiert die erste Zahl, und rundet sie auf &#039;&#039;&#039;n&#039;&#039;&#039; Dezimalstellen, ohne &#039;&#039;&#039;n&#039;&#039;&#039; auf eine Stelle.&lt;br /&gt;
* &#039;&#039;&#039;sec&#039;&#039;&#039; liefert die Zeit in Sekunden seit Änderung des Readings.&lt;br /&gt;
* &#039;&#039;&#039;t&#039;&#039;&#039; liefert den Zeitstempel des Readings&lt;br /&gt;
&lt;br /&gt;
== Syntax 2 ==&lt;br /&gt;
  {(&amp;lt;Perlausdruck&amp;gt;)}&lt;br /&gt;
Der [[Gerätename]] kann im Perlausdruck mit $DEV angegeben werden.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Mit [[set magic#Syntax 1|Syntax 1]] im Gegensatz zu [[set magic#Syntax 2|Syntax 2]], ist es möglich ohne Perlkenntnis variable Inhalte zu setzen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel Syntax 1: Formatieren eines Readingwertes zu einer Ganzzahl ===&lt;br /&gt;
In einem [[Gerät]] &#039;&#039;sensor&#039;&#039; wird der Wert des [[Readings|Reading]] &#039;&#039;brightness&#039;&#039; zu einer Ganzzahl umgewandelt und in das [[Readings|Reading]] &#039;&#039;brightness&#039;&#039; des Gerätes &#039;&#039;Anzeige&#039;&#039; geschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setreading Anzeige brightness [sensor:brightness:i]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel Syntax 2: Inkrementieren eines Readingwertes ===&lt;br /&gt;
In einem [[Gerät]] &#039;&#039;PIR&#039;&#039; wird das [[Readings|Reading]] &#039;&#039;Count&#039;&#039; um den Wert 1 erhöht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setreading PIR Count {(ReadingsNum(&amp;quot;PIR&amp;quot;,&amp;quot;Count&amp;quot;,0) + 1)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=37406</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=37406"/>
		<updated>2022-04-26T21:33:05Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Ergänzung der Tabelle Kürzel für Forecasts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270|Linktext=Beitrag im Forum}}).}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verfügung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls] oder hier: https://opendata.dwd.de/weather/lib/MetElementDefinition.xml.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
2. Weiterhin ist das Perl-Modul &#039;&#039; DateTime&#039;&#039; erforderlich. Dieses lässt sich mit &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install libdatetime-perl&amp;lt;/source&amp;gt; installieren.&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {$ENV{LANG}}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDatadefine|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDataattr|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen (Spalte &#039;&#039;id&#039;&#039;). Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssel ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, der kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Warnzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtigung bestimmter Readings, entsteht unnötiger Verarbeitungs-Overhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung zu sorgen, indem man nur für jene Readings Ereignisse zulässt, welche man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der&lt;br /&gt;
{{Link2CmdRef|Anker=DWD_OpenData|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenform mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen ein [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man stattdessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_FileLog_WETTER_DWD_3 label &amp;quot;Tmin: $data{max1} °C, Tmax: $data{min1} °C&amp;quot;&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Die y-Wertebereiche für die Regenmenge und die Temperaturen sind im Beispiel auskommentiert (Autorange). Das kann man so lassen oder man stellt sie nach den eigenen Wetter-Gegebenheiten ein. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
#set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
#set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weiteren Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=35974</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=35974"/>
		<updated>2021-08-25T16:01:30Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: mehrere Namen im attr alexaName werden durch Komma getrennt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch Strichpunkt getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche im WebFrontend oder der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;. Für nicht-Mac/iOS Anwerder empfiehlt das WebFrontend (https://alexa.amazon.de) statt die App, damit Du den Anmeldeschlüssel auch bequem kopieren kannst.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=35679</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=35679"/>
		<updated>2021-05-09T06:38:00Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Komma in  $prop in Randnotiz cards ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state screen.png|700px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile eines DOIF-Devices. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der Abbildung rechts ist ein Statusbildschirm aus vier Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[[DOIF/uiTable Schnelleinstieg#Anwendungsbeispiele|Anwendungsbeispiele]]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Der Perlblock|Perlblock]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates-Definitionen]] &lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Die Tabellendefinition|Tabellendefinition]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu, das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &amp;quot;.*&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &amp;quot;^info$&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* wird eine Zeile mit &amp;lt; abgeschlossen, so wird die aktuelle Tabelle abgeschlossen, die nächste Zeile beginnt in einer neuen Tabelle&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Widgets mit der Funktion &#039;&#039;&#039;widget&#039;&#039;&#039; ===&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der Perlfunktion &#039;&#039;&#039;widget&#039;&#039;&#039; genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
{{Randnotiz|RNText=Funktion &#039;&#039;&#039;widget&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
widget(&amp;lt;Reading&amp;gt;,$fhem_widget,$set)&lt;br /&gt;
&lt;br /&gt;
Reading      # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
$fhem_widget # Angabe des FHEM-Widgets&lt;br /&gt;
$set         # optional, undef zum Setzen beliebiger Readings (entspricht setreading), &amp;quot;set&amp;quot; wenn das Reading per set-Befehl gesetzt wird (siehe Attribut ReadingList), &amp;quot;set &amp;lt;Befehl&amp;gt;&amp;quot;, wenn sich der Befehl vom Reading unterscheidet, default undef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FHEMWEB/Widgets|Fhem-Widgets]]&lt;br /&gt;
* Fhem-Widgets als [[DOIF/uiTable Schnelleinstieg#Eigene uiTable-Funktionen programmieren|uiTable-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_widget DOIF ##&lt;br /&gt;
attr di_uiTable_widget uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
{package ui_Table}\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| widget([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| widget([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| widget([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| widget([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| widget([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| widget([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| widget([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Bei allen SVG-Funktionen für Temperatur bzw. Feuchtigkeit wird die Einfärbung abhängig vom Temperatur- bzw. Feuchtigkeitswert mit Hilfe einer Zuordnungsfunktion bestimmt.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen (standard)&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser (größer,aufgehellt,Normalschrift)&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100,&amp;quot;1,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;Vorlauf (größer)&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$unit, $size,$colorRef,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$ligh      # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF (1)&lt;br /&gt;
attr di_ring room test5,testeinzel&lt;br /&gt;
attr di_ring uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring(12.9,0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180), eine Nachkommastelle, Schriftgröße 170%\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring(1.2,0,3,0,180,&amp;quot;bar&amp;quot;,100,undef,&amp;quot;1,font-size:170%&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([Aussensensor:temperature],-20,60,100,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)\&lt;br /&gt;
## Eine Nachkommastelle, Normalschrift, Schriftgröße 140%\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring(12.5,-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue,&amp;quot;1,font-weight:normal;;font-size:140%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;größer, aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)\&lt;br /&gt;
&amp;quot;größer, Ring aufgehellt, Normalschrift&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,80,50,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$unit1,$size,$colorFunc1,$decFont1,&lt;br /&gt;
       $value2,$min2,$max2,$minColor2,$maxColor2,$unit2,$colorFunc2,$decFont2)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit1      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     # darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;Ring&amp;gt;,&amp;lt;Einheit&amp;gt;,&amp;lt;Wert&amp;gt;,&amp;lt;Icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table;;}\&lt;br /&gt;
## Leistungsaufnahme von 0 kW bis 3,6 kW in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| ring2([tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
## 3 Nachkommastellen, Normalschrift, Schriftgröße 80%  \&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,undef,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,&amp;quot;3,font-weight:normal;;font-size:80%&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_ring&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber,$decFont) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden. Die Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; stellt den Farbring mit Farbverlauf dar, die Funktion &#039;&#039;&#039;icon_mring&#039;&#039;&#039; stellt den Farbring einfarbig dar. Die universelle Funktion &#039;&#039;&#039;icon_uring&#039;&#039;&#039; kann über den Parameter &#039;&#039;&#039;$model&#039;&#039;&#039; das Erscheinungsbild der Grafik verändern.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring/icon_mring/icon_uring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_mring ($icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
icon_uring ($model,$icon,$value,$min,$max,$minColor,$maxColor, $unit,$decFont,$size,$colorRef,$lightness)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$lightnesss# Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;Innenring&amp;gt;,&amp;lt;minmax&amp;gt;,&amp;lt;Einheit&amp;gt;,&amp;lt;Wert&amp;gt;,&amp;lt;Icon&amp;gt;&amp;quot;, optional, default: (50,40,40,40,50,40)&lt;br /&gt;
$model     # &#039;&amp;lt;Farbverlauf&amp;gt;,&amp;lt;Min/Max&amp;gt;,&amp;lt;Innenring&amp;gt;,&amp;lt;Zeigerstärke&amp;gt;&#039;, Farbverlauf: 1 für monochrom, Min/Max: Style-SVG-Attribute oder 1 zum Anzeigen der Min-/Maxwerte, Innenring: Style-SVG-Attribute oder 1 zum Anzeigen des Innenrings, Zeigerstärke: in Pixel, alle Parameter sind optional, default keine Angaben: &#039;,,,,&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&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;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
icon_ring (&#039;sani_floor_heating_neutral&#039;,[Heizenergie:Vortag_hc],0,150,120,0,&#039;kWh&#039;)|\&lt;br /&gt;
icon_mring (&#039;fuel&#039;,[Tankstelle:Diesel],1.10,1.30,120,0,&#039;€&#039;,2)|\&lt;br /&gt;
icon_uring (&#039;0,1,1&#039;,&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,undef,undef,&#039;ppm&#039;,0,100,[(600,120,1000,60,1200,0)])|\&lt;br /&gt;
icon_uring (&#039;0,1&#039;,&#039;Zisterne&#039;,([Wasserzisterne]/3.4),0,100,0,120,&#039;%&#039;,0)##/\&lt;br /&gt;
\&lt;br /&gt;
icon_uring (&#039;1,1,0,8&#039;,&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&#039;l&#039;,0)|\&lt;br /&gt;
icon_uring (&#039;0,fill:white,opacity:0.4&#039;,([vaillant:Pumpenstatus] eq &#039;4&#039; ? &#039;sani_buffer_temp_down@Darkorange&#039; : &#039;sani_buffer_temp_down@white&#039;),[vaillant:Umlaufmenge],0,20,120,0,&#039;l/min&#039;)|\&lt;br /&gt;
icon_uring(&#039;0,1,1,4&#039;,&#039;weather_barometric_pressure&#039;,[vaillant:Wasserdruck],0,3,undef,undef,&#039;bar&#039;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_uring(&#039;0,opacity:0.8,1,6&#039;,&#039;sani_water_tap&#039;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&#039;h&#039;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_hum_ring ($icon,$temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp,$decFontHum)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp # Temperatur: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontHum  # Feuchtigkeit: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;normal&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;mit Normalschrift&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,undef,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
&amp;quot;größer aufgehellt&amp;quot;|icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:humidity], undef,undef,120,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_hum_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit einem Icon mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_temp_ring ($icon,$temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber,$decFontTemp1,$decFontTemp2)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFontTemp1 # Temperatur1: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$decFontTemp2 # Temperatur2: &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_icon_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
## Größe 120%\&lt;br /&gt;
&amp;quot;FB-Heizung&amp;quot;|icon_temp_temp_ring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70,120)\&lt;br /&gt;
\&lt;br /&gt;
## Größe 120%, Normalschrift\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;|icon_temp_temp_ring(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],[Aussensensor:dewpoint],undef,undef,120,undef,undef,&amp;quot;1,font-weight:normal&amp;quot;,&amp;quot;1,font-weight:normal&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_temp_ring.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit einem Icon mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_ring2 ($icon,$value1,$min1,$max1,$minColor1,$maxColor1,$unit1,$size,$colorFunc1,$decFont1,&lt;br /&gt;
       $value2,$min2,$max2,$minColor2,$maxColor2,$unit2,$colorFunc2,$decFont2,$lightnesss)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit1      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont1   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$value2     ## darzustellender Wert2&lt;br /&gt;
...&lt;br /&gt;
$unit2      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$colorFunc2 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont2   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$lightness  # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;Ring&amp;gt;,&amp;lt;Einheit&amp;gt;,&amp;lt;Wert&amp;gt;,&amp;lt;Icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,40,50,40&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Argumente für den zweiten Wert entsprechend den Argumenten des ersten Wertes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert.&lt;br /&gt;
&lt;br /&gt;
Bei der Farbangabe des Icons beim Übergabeparameter $icon wird mit &#039;&#039;&#039;\@colorVal2&#039;&#039;&#039; das Icon mit der Farbe des zweiten Wertes eingefärbt. Bei keiner Farbangabe oder &#039;&#039;&#039;\@colorVal1&#039;&#039;&#039; wird das Icon mit der Farbe des ersten Wertes eingefärbt. Ansonsten gilt die allgemeine FHEM-Syntax für Farbgebung von Icons angehängt mit &#039;&#039;&#039;\@&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring2 DOIF ##&lt;br /&gt;
attr di_icon_ring2 uiTable {package ui_Table;;\&lt;br /&gt;
\&lt;br /&gt;
sub himmelsrichtung {\&lt;br /&gt;
my ($richtung)=@_;;\&lt;br /&gt;
my $element=int($richtung/22.5);;\##/&lt;br /&gt;
my @h=(qw&amp;quot;N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW&amp;quot;);;\&lt;br /&gt;
return($h[$element]);;\&lt;br /&gt;
}\&lt;br /&gt;
}\&lt;br /&gt;
&amp;quot;Wallbox&amp;quot;| icon_ring2(&amp;quot;car,1.5,0,-3&amp;quot;,[tesla:Leistung],0,3.6,120,0,&amp;quot;kW&amp;quot;,120,undef,&amp;quot;1,font-weight:normal&amp;quot;,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,&amp;quot;0,font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Wind&amp;quot;|icon_ring2(([Wind:Geschwindigkeit]&amp;gt;0 ? &amp;quot;wind&amp;quot;:&amp;quot;no_wind&amp;quot;).&amp;quot;,1,0,0,&amp;quot;.[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,&amp;quot;km/h&amp;quot;,120,undef,1,[Wind:Richtung],361,361,220,220,([Wind:Geschwindigkeit]&amp;gt;0?himmelsrichtung([Wind:Richtung]):&amp;quot;--&amp;quot;),undef,0)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Strom&amp;quot;|icon_ring2([zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,[zaehler:l-Produktion],0,3.6,20,120,&amp;quot;PV kW&amp;quot;,150,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;,[zaehler:l-Bezug,0],0,2,120,0,&amp;quot;Netz kW&amp;quot;,undef,&amp;quot;1,,font-size:50%;fill:white&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring2.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_bar DOIF ##&lt;br /&gt;
attr di_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$hum_value   # Feuchtigkeitswert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=80&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$decFont,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 60&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;undef,70,undef,undef,&amp;quot;1,font-size:130%;;font-weight:normal&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,undef,undef,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;icon_bar&#039;&#039;&#039;-Funktionen ====&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size, $light,$lightnumber,$decFont)&lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=63&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=75&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
$decFont     # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$decfont,$header,$width,$height,$size, $colorFunc,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation (0-360) sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Schrift-SVG-Attribute Wert&amp;gt;,&amp;lt;Schrift-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional, default = 1&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 63&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 75&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Anzeige eines Werteverlaufs und des aktuellen Wertes mit Hilfe der SVG-Funktion &#039;&#039;&#039;card&#039;&#039;&#039; ====&lt;br /&gt;
Es wird der aktuelle Wert eines Readings, sein zeitlicher Verlauf sowie der maximale und minimale Wert in Form einer Informationskarte visualisiert. Das Erscheinungsbild kann über zahlreiche Parameter individualisiert werden. Die Besonderheit ist das Argument &#039;&#039;&#039;col&amp;lt;Anzahl&amp;gt;&amp;lt;Zeitformat&amp;gt;&#039;&#039;&#039; bei der Angabe des Readings der Form &#039;&#039;&#039;[&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:col&amp;lt;Anzahl&amp;gt;&amp;lt;Zeitformat&amp;gt;]&#039;&#039;&#039;. Dadurch werden Daten des Readings temporär im DOIF-Modul gesammelt und für die Erzeugung eines Graphen zur Verfügung gestellt - es sind keine weiteren Definitionen erforderlich. Dabei wird besonders sparsam mit der Datensammlung umgegangen, es werden maximal 72 Werte (in Timeslots)  gespeichert, unabhängig davon wie lange die Zeitspanne ist und wie oft die Daten ankommen. Die Auflösung des Graphen nimmt mit der Zeitspanne ab - es werden immer maximal 72 Werte dargestellt. Daraus ergibt sich bei einer Stunde eine Auflösung von einer 3600/72=50 Sekunden/Eintrag, bei 6 Stunden sind es 6*60/72=5 Minuten/Eintrag, für eine Woche 7*24*60/72=140 Minuten/Eintrag usw. Die gesammelten Daten werden über den FHEM-Befehl &#039;&#039;&#039;save&#039;&#039;&#039; in versteckten Readings des jeweiligen DOIF-Moduls gespeichert.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
card ($collect,$header,$icon,$min,$max,$minColor,$maxColor, $unit,$colorRef,$decfont,$prop,$ringModel,$lightness)&lt;br /&gt;
&lt;br /&gt;
$collect   # Angabe eine Readings der Form [&amp;lt;Device&amp;gt;:&amp;lt;Reading&amp;gt;:col&amp;lt;Anzahl&amp;gt;&amp;lt;Zeitformat&amp;gt;], mit Hilfe des Argumentes col (von collect) wird das Modul angewiesen Daten des Readings über einen bestimmten Zeitraum zu sammeln&lt;br /&gt;
&lt;br /&gt;
col&amp;lt;Anzahl&amp;gt;&amp;lt;Zeitformat&amp;gt; # &amp;lt;Zeitformat&amp;gt;: d Tage, w Wochen, ohne Angabe des Zeitformates wird &amp;lt;Anzahl&amp;gt; in Stunden interpretiert. Beispiele: col (entspricht col24), col1, col12, col1d, col3d, col1w, col4w, col52w usw.&lt;br /&gt;
&lt;br /&gt;
$header    # &amp;quot;&amp;lt;Überschrifttext,&amp;lt;Style-SVG-Text-Attribute&amp;gt;&amp;quot;, optional&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position,Rotation&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position, Rotation sind optional&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = 0 (rot)&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = 120 (grün)&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$colorRef  # Referenz auf eine Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, oder eine Referenz auf eine Arrayliste mit Grenzwerten und Farben, optional, default = undef&lt;br /&gt;
$decFont   # &amp;quot;&amp;lt;Anzahl der Nachkommastellen&amp;gt;,&amp;lt;Style-SVG-Attribute Wert&amp;gt;,&amp;lt;Style-SVG-Attribute Einheit&amp;gt;&amp;quot;, optional&lt;br /&gt;
$prop      # &amp;quot;&amp;lt;Größe der Karte&amp;gt;,&amp;lt;feste Y-Skalierung&amp;gt;,&amp;lt;steps&amp;gt;,&amp;lt;noFooter&amp;gt;&amp;quot;, optional, Größe der der Karte, default = 130, feste Y-Skalierung: 1, sonst automatische Skalierung, steps: 1 für Stufen, noFooter: 1 für keine Fußzeile&lt;br /&gt;
$ringModel # &#039;&amp;lt;Farbverlauf&amp;gt;,&amp;lt;Min/Max&amp;gt;,&amp;lt;Innenring&amp;gt;,&amp;lt;Zeigerstärke&amp;gt;&#039;, Farbverlauf: 1 für monochrom, Min/Max: Style-SVG-Attribute oder 1 zum Anzeigen der Min-/Maxwerte, Innenring: Style-SVG-Attribute oder 1 zum Anzeigen des Innenrings, Zeigerstärke: in Pixel, alle Parameter sind optional, default keine Angaben: &#039;,,,,&#039;&lt;br /&gt;
$lightness # Helligkeit einzelner Elemente (0-100) &amp;quot;&amp;lt;ring&amp;gt;,&amp;lt;Innenring&amp;gt;,&amp;lt;minmax&amp;gt;,&amp;lt;Einheit&amp;gt;,&amp;lt;Wert&amp;gt;,&amp;lt;Icon&amp;gt;&amp;quot;, optional, default: &amp;quot;50,40,40,40,50,40&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorRef&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_Wetterstation|Wetterstation]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis|Spritpreise]]&lt;br /&gt;
* Anwendungsbeispiel [[DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung:_Heiztherme|Heiztherme]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_eines_Icons_mit_einem_Zahlenwert_mit_Hilfe_der_universellen_SVG-Funktion_icon_ring.2Ficon_mring.2Ficon_uring|icon_ring]] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_collect DOIF ##&lt;br /&gt;
attr di_collect uiTable {package ui_Table;;}\&lt;br /&gt;
card([Aussensensor:temperature:col12],&amp;quot;Außen&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,45,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,undef)|\&lt;br /&gt;
card([Tankstelle:Diesel:col12],&amp;quot;Sprit,fill:darkorange&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([zaehler:l-Produktion:col12],undef,[zaehler:l-Produktion] &amp;gt; 0 ? &amp;quot;sani_solar\@colorVal1&amp;quot;:&amp;quot;fa_bolt\@colorVal2&amp;quot;,0,3.6,30,60,&amp;quot;PV kW&amp;quot;,undef,&amp;quot;1,,font-size:50%&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_Eingang_CO2:PPM:col12],undef,&amp;quot;air&amp;quot;,400,1200,120,0,&amp;quot;ppm&amp;quot;,[(600,120,1000,60,1200,0)],0,undef,&#039;0,1,1&#039;,&amp;quot;50,35,45,35,50,35&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:svgcard.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== 3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder&#039;&#039;&#039; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Balkendarstellung mehrerer Zahlenwerte mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ===&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ===&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ===&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [[DevelopmentFHEMWEB-API#FW_makeImage|FW_makeImage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#hsv-Funktion für Farbskalierungen|hsv-Funktion]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Anzahl der Tage bis zur Abfall-Entsorgung|Abfall]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung: aktueller Spritpreis|Sprit]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ===&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ===&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#Visualisierung und Steuerung von Rollläden|Anwendungsbeispiel]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
===  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
===  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;&amp;quot; or &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
**{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf}}&lt;br /&gt;
**[[DevelopmentModuleAPI#devspec2array|devspec2array]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* {{Link2CmdRef|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Lang=de|Label=Zeitsteuerung}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion shutter|shutter]]&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Textformatierungen mit Hilfe der Funktion style|style]]&lt;br /&gt;
* [[DOIF/uiTable Schnelleinstieg#uiTable-Templates|Templates]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [[Calendar]]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelber&amp;quot; und &amp;quot;Grünschnitt&amp;quot; im Kalender gesucht. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [[Calendar]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Die Funktion &#039;days&#039; sucht nach dem Ereignis $event im Kalender und berechnet die Anzahl der verbleibenden Tage und legt sie im entsprechendem Reading $reading des DOIF-Moduls ab\&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
    set_Reading($reading,fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;)-::strftime (&#039;%j&#039;, localtime()),1)\&lt;br /&gt;
  }\&lt;br /&gt;
  ## Die Funktion &#039;update&#039; bestimmt die verbleibenden Tage mit Hilfe der obigen Funktion &#039;days&#039; für die jeweiligen Tonnen\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    days(&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;);;days(&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;);;days(&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;);;days(&amp;quot;Gelber&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;);;days(&amp;quot;Grünschnitt&amp;quot;,&amp;quot;gruenschnitt&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Beim Start, um 02:00 Uhr und 08:00 Uhr wird zeitverzögert die obige Funktion &#039;update&#039; aufgerufen\&lt;br /&gt;
init {[02:00];;[08:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;\&lt;br /&gt;
}&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
 \&lt;br /&gt;
  ## die Funktion &#039;ic&#039; benutzt die Funktion &#039;icon_label&#039; für die Darstellung des Icons, abhängig von der Anzahl der Tage wird die Anzahl in grün bzw. rot eingefärbt \&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days &amp;gt; 1 ? &amp;quot;green&amp;quot;:&amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition, die einzelnen Tonnen werden mit Hilfe der obigen Funkton &#039;ic&#039; dargestellt\&lt;br /&gt;
\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;,[$SELF:gelbe_tonne])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;,[$SELF:altpapier])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne\@gray&amp;quot;,[$SELF:restmuell])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;,[$SELF:bio])|\&lt;br /&gt;
ic (&amp;quot;Gartenabfall\@green&amp;quot;,[$SELF:gruenschnitt])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut {{Link2CmdRef|Anker=DOIF_DOIF_Readings|Lang=de|Label=DOIF_Readings}}&lt;br /&gt;
* DOIF-{{Link2CmdRef|Anker=DOIF_aggregation|Lang=de|Label=Aggregationsfunktionen}}&lt;br /&gt;
* uiTable-Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Hilfe der Funktion icon|icon]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
* &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Wetterstation&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Die vorgestellte Lösung funktioniert ohne Anmeldung beim Wetterdienst und ohne Nutzung von API.&lt;br /&gt;
Über den Wetterdienst: https://www.wunderground.com/ werden sehr viele private Wifi-Wetterstationen eingebunden. Das kann man sich zunutze machen, indem man zunächst in seiner Umgebung nach Wetterstationen des Dienstes sucht - oft findet man im Umkreis von wenigen Kilometern schon einige Stationen, die rege Wetterdaten liefern. Danach definiert man über HTTPMOD seine Station und visualisiert diese anschließend.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Wunderground [https://wunderground.com/ Homepage]&lt;br /&gt;
* svg-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card card]&lt;br /&gt;
* svg-Funktionen [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen icon_ring]&lt;br /&gt;
}}&lt;br /&gt;
Definition einer Station in der Nachbarschaft. &amp;lt;StationsID&amp;gt; muss gegen die korrekte Stationsnummer ersetzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Wetter HTTPMOD https://www.wunderground.com/dashboard/pws/&amp;lt;StationsID&amp;gt;&lt;br /&gt;
attr Wetter enableControlSet 1&lt;br /&gt;
attr Wetter reading01Name Wind&lt;br /&gt;
attr Wetter reading01Regex wu-unit .{109}&amp;gt;(\d+\.\d)&lt;br /&gt;
attr Wetter reading02Name Windboeen&lt;br /&gt;
attr Wetter reading02Regex wu-unit-speed .{109}&amp;gt;(\d+\.\d)&lt;br /&gt;
attr Wetter reading03Name Windrichtung&lt;br /&gt;
attr Wetter reading03Regex (\d+)deg\).{84}Wind-Marker&lt;br /&gt;
attr Wetter reading04Name Regen&lt;br /&gt;
attr Wetter reading04Regex wu-unit-rainRate .{109}&amp;gt;(\d+\.\d\d)&lt;br /&gt;
attr Wetter reading05Name RegenGesamt&lt;br /&gt;
attr Wetter reading05Regex wu-unit-rain .{109}&amp;gt;(\d+\.\d\d)&lt;br /&gt;
attr Wetter reading06Name Temperatur&lt;br /&gt;
attr Wetter reading06Regex wu-unit-temperature .{127}&amp;gt;(\d+.\d)&lt;br /&gt;
attr Wetter reading07Name Feuchtigkeit&lt;br /&gt;
attr Wetter reading07Regex wu-unit-humidity .{109}&amp;gt;(\d\d)&lt;br /&gt;
attr Wetter reading08Name UV&lt;br /&gt;
attr Wetter reading08Regex UV&amp;lt;.{268}&amp;gt;(\d)&lt;br /&gt;
attr Wetter reading09Name Luftdruck&lt;br /&gt;
attr Wetter reading09Regex PRESSURE&amp;lt;.{285}&amp;gt;(\d+.\d+)&lt;br /&gt;
attr Wetter reading10Name TemperaturGefuehlt&lt;br /&gt;
attr Wetter reading10Regex wu-unit is-degree-visible .{109}&amp;gt;(\d+.\d)&lt;br /&gt;
attr Wetter reading11Name TaupunktTemp&lt;br /&gt;
attr Wetter reading11Regex DEWPOINT.{306}&amp;gt;(\d+.\d)&lt;br /&gt;
attr Wetter reading12Name Sonnenstrahlung&lt;br /&gt;
attr Wetter reading12Regex Solar radiation&amp;lt;.{549}&amp;gt;(\d+.\d+)&lt;br /&gt;
attr Wetter timeout 10&lt;br /&gt;
attr Wetter userReadings WindKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Wind&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindboeenKm {sprintf(&amp;quot;%1.1f&amp;quot;,ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Windboeen&amp;quot;,0)*1.60934)},\&lt;br /&gt;
WindrichtungGrad {ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Windrichtung&amp;quot;,0)-180},\&lt;br /&gt;
RegenMm {ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Regen&amp;quot;,0)*25.4},\&lt;br /&gt;
RegenGesamtMm {ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;RegenGesamt&amp;quot;,0)*25.4},\&lt;br /&gt;
TemperaturC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Temperatur&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
TaupunktTempC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;TaupunktTemp&amp;quot;,0)-32)*5/9)},\&lt;br /&gt;
LuftdruckHpa {sprintf(&amp;quot;%d&amp;quot;,ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;Luftdruck&amp;quot;,0)*33.8639)},\&lt;br /&gt;
TemperaturGefuehltC {sprintf(&amp;quot;%1.1f&amp;quot;,(ReadingsVal(&amp;quot;Wetter&amp;quot;,&amp;quot;TemperaturGefuehlt&amp;quot;,0)-32)*5/9)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Visualisierung der Daten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter_ring DOIF ##&lt;br /&gt;
attr di_Wetter_ring uiTable {package ui_Table;;}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_hum_ring(&amp;quot;temp_outside&amp;quot;,[Wetter:TemperaturC],[Wetter:Feuchtigkeit],undef,undef,150)|\&lt;br /&gt;
icon_temp_ring (&amp;quot;temp_windchill&amp;quot;,[Wetter:TemperaturGefuehltC],undef,undef,150) |\&lt;br /&gt;
icon_temp_ring (&amp;quot;temperature_humidity&amp;quot;,[Wetter:TaupunktTempC],undef,undef,150) |\&lt;br /&gt;
icon_ring2([Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,[Wetter:WindKm],0,50,120,0,&amp;quot;km/h&amp;quot;,150,undef,1,[Wetter:WindboeenKm],0,50,120,0,&amp;quot;km/h&amp;quot;,undef,1) |\&lt;br /&gt;
icon_ring2(&amp;quot;weather_rain_gauge&amp;quot;,[Wetter:RegenMm],0,10,180,270,&amp;quot;mm/h&amp;quot;,150,undef,1,[Wetter:RegenGesamtMm],0,50,180,270,&amp;quot;mm&amp;quot;,undef,1)|\&lt;br /&gt;
icon_ring2(&amp;quot;sani_solar&amp;quot;,[Wetter:UV],0,10,100,30,&amp;quot;UV&amp;quot;,150,undef,0,[Wetter:Sonnenstrahlung],0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[Wetter:LuftdruckHpa],980,1047,0,120,&amp;quot;hPa&amp;quot;,0,150)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable ringwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel der Visualisierung mit Hilfe der svg-Funktion &#039;&#039;&#039;card&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Wetter DOIF ##&lt;br /&gt;
attr di_Wetter uiTable {package ui_Table;;}\&lt;br /&gt;
##  card ($collect,$header,$icon,$min,$max,$minColor,$maxColor,$unit,$func,$decfont,$size,$model,$lightness)\&lt;br /&gt;
\&lt;br /&gt;
card([Wetter:TemperaturC:col12],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-10,30,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TemperaturGefuehltC:col12],&amp;quot;gefühlte Temperatur&amp;quot;,&amp;quot;temp_windchill&amp;quot;,-10,30,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:TaupunktTempC:col12],&amp;quot;Taupunkttemperatur&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,-10,30,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([Wetter:Feuchtigkeit:col12],&amp;quot;Außenfeuchtigkeit&amp;quot;,&amp;quot;temperature_humidity&amp;quot;,30,100,undef,undef,&amp;quot;%&amp;quot;,\&amp;amp;hum_hue)|\&lt;br /&gt;
card([Wetter:WindKm:col],&amp;quot;Wind&amp;quot;,[Wetter:WindKm] &amp;gt; 0 ? &amp;quot;wind&amp;quot;.&amp;quot;,1,0,0,&amp;quot;.[Wetter:WindrichtungGrad]:&amp;quot;no_wind&amp;quot;,0,30,120,0,&amp;quot;km/h&amp;quot;,undef,1)\&lt;br /&gt;
card([Wetter:WindboeenKm:col12],&amp;quot;Windböen&amp;quot;,&amp;quot;weather_wind&amp;quot;,0,30,120,0,&amp;quot;km/h&amp;quot;,undef,1)|\&lt;br /&gt;
card([Wetter:RegenMm:col12],&amp;quot;Regen&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,10,180,270,&amp;quot;mm/h&amp;quot;)|\&lt;br /&gt;
card([Wetter:RegenGesamtMm:col12],&amp;quot;Regengesamt&amp;quot;,&amp;quot;weather_rain_gauge&amp;quot;,0,50,180,270,&amp;quot;mm&amp;quot;)|\&lt;br /&gt;
##card([Wetter:UV:col],&amp;quot;UV-Strahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,7,100,30,&amp;quot;UV&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:Sonnenstrahlung:col12],&amp;quot;Sonnenstrahlung&amp;quot;,&amp;quot;sani_solar&amp;quot;,0,1000,100,30,&amp;quot;Watt/m²&amp;quot;,undef,0)|\&lt;br /&gt;
card([Wetter:LuftdruckHpa:col12],&amp;quot;Luftdruck&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,980,1047,0,120,&amp;quot;hPa&amp;quot;,undef,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable svgwetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Angabe der Überschrift (undef für $header setzen) lässt sich eine kompaktere Darstellung erzielen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:UiTable svgwetteroh.png|600px|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird ermittelt und mit seinem zeitlichen Verlauf visualisiert.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#ring-Funktionen|ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* [https://www.clever-tanken.de Tankstelle bestimmen]&lt;br /&gt;
* Modul [[HTTPMOD]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Spritpreis definiert, dabei ist &amp;lt;Stations-ID&amp;gt; durch die ID der Tankstelle zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/&amp;lt;Stations-ID&amp;gt; 300&lt;br /&gt;
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;Diesel&amp;quot;,0),1.00,1.40,120,0,&amp;quot;Diesel&amp;quot;,90,undef,2).&amp;quot; &amp;quot;.ui_Table::ring(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;SuperE5&amp;quot;,0),1.10,1.60,120,0,&amp;quot;E5&amp;quot;,90,undef,2)}&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle event-on-change-reading .*&lt;br /&gt;
attr Tankstelle group Spritpreise&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle room Spritpreise&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Tankstelle.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
Visualisierung der Preisentwicklung der letzten 24 Stunden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod sprit DOIF ##&lt;br /&gt;
attr sprit uiTable {package ui_Table;;}\&lt;br /&gt;
card([Tankstelle:Diesel:col24],&amp;quot;Diesel&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.00&amp;quot;,&amp;quot;1.40&amp;quot;,120,0,&amp;quot;Diesel €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)\&lt;br /&gt;
card([Tankstelle:SuperE5:col24],&amp;quot;Super E5&amp;quot;,&amp;quot;fuel&amp;quot;,&amp;quot;1.10&amp;quot;,&amp;quot;1.60&amp;quot;,120,0,&amp;quot;Super €&amp;quot;,undef,&amp;quot;2&amp;quot;,&amp;quot;,,1&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung: &#039;&#039;&#039;Heiztherme&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel wurde eine Heiztherme über einen ebus-Adapter in FHEM eingebunden. Die Heizungsdaten werden über MQTT ausgelesen und anschließend visualisiert. Die vorgestellten Visualisierungsbeispiele können ebenso im funktionslosen DOIF mit Hilfe des uiTable-Attriutes auf bereits existierende Readings des eigenen Systems angewendet werden. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#icon_ring-Funktionen|icon_ring]]&lt;br /&gt;
* svg-Funktion [[DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card|card]]&lt;br /&gt;
* Commandref [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF Perl-Modus]&lt;br /&gt;
* ebus-Adapter [https://ebusd.de/ ebusd]&lt;br /&gt;
* ebus-Wiki [[EBUS|ebus]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Definition eines MQTT2-Devices für die Kommunikation mit der Therme über einen ebus-Adapter.&lt;br /&gt;
&lt;br /&gt;
Im diesem Fall wurde eine Vaillanttherme eingebunden, die meisten Readings wurden automatisch vom MQTT2-Server angelegt. Die Anbindung ist gerätespezifisch und unterscheidet sich je nach Gerättyp.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod vaillant MQTT2_DEVICE ebusd_bai&lt;br /&gt;
attr vaillant IODev MQTT2_FHEM_Server&lt;br /&gt;
attr vaillant devStateStyle style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
attr vaillant event-on-change-reading .*&lt;br /&gt;
attr vaillant group Ebus&lt;br /&gt;
attr vaillant icon sani_boiler_temp&lt;br /&gt;
attr vaillant jsonMap Status01_0_value:Vorlauf Status01_0_name:0\&lt;br /&gt;
Status01_1_value:Ruecklauf Status01_1_name:0\&lt;br /&gt;
Status01_2_value:Aussentemp Status01_2_name:0\&lt;br /&gt;
Status01_3_value:Warmwasser Status01_3_name:0\&lt;br /&gt;
Status01_4_value:WWSpeicher Status01_4_name:0\&lt;br /&gt;
Status01_5_value:Pumpenstatus Status01_5_name:0\&lt;br /&gt;
Flame_0_value:Flame Flame_0_name:0\&lt;br /&gt;
Storageloadpump_percent0_value:Storageloadpump\&lt;br /&gt;
FlowTempDesired_temp_value:VorlaufSoll\&lt;br /&gt;
Hc1HeatCurve_0_value:HeizKennlinie Hc1HeatCurve_0_name:0\&lt;br /&gt;
HolidayEndPeriod_hto_value:FerienEnde\&lt;br /&gt;
HolidayStartPeriod_hfrom_value:FerienBeginn\&lt;br /&gt;
PumpPower_0_value:PumpenLeistung PumpPower_0_name:0\&lt;br /&gt;
PrimaryCircuitFlowrate_uin100_value:Umlaufmenge\&lt;br /&gt;
z1DayTemp_tempv_value:TagSolltemp\&lt;br /&gt;
z1NightTemp_tempv_value:NachtSolltemp\&lt;br /&gt;
FanSpeed_0_value:LuefterDrehzahl FanSpeed_0_name:0\&lt;br /&gt;
WaterPressure_pressv_value:Wasserdruck\&lt;br /&gt;
z1OpMode_opmode_value:Heizmodus&lt;br /&gt;
attr vaillant model eBus_bai_jsonmap&lt;br /&gt;
attr vaillant readingList ebusd/bai/PumpHours:.* { json2nameValue($EVENT, &#039;PumpHours_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/WPPostrunTime:.* { json2nameValue($EVENT, &#039;WPPostrunTime_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PowerValue:.* { json2nameValue($EVENT, &#039;PowerValue_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/StorageExitTemp:.* { json2nameValue($EVENT, &#039;StorageExitTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/global/version:.* version\&lt;br /&gt;
ebusd/global/running:.* running\&lt;br /&gt;
ebusd/scan\x5c\x2e08/:.* { json2nameValue($EVENT, &#039;scan.08_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/scan\x5c\x2e08/id:.* { json2nameValue($EVENT, &#039;id_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/global/uptime:.* uptime\&lt;br /&gt;
ebusd/global/signal:.* signal\&lt;br /&gt;
ebusd/scan\x5c\x2e15/:.* { json2nameValue($EVENT, &#039;scan.15_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/scan\x5c\x2e15/id:.* { json2nameValue($EVENT, &#039;id_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/FanSpeed:.* { json2nameValue($EVENT, &#039;FanSpeed_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PumpPower:.* { json2nameValue($EVENT, &#039;PumpPower_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/broadcast/vdatetime:.* { json2nameValue($EVENT, &#039;vdatetime_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/broadcast/outsidetemp:.* { json2nameValue($EVENT, &#039;outsidetemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/DateTime:.* { json2nameValue($EVENT, &#039;DateTime_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/global/updatecheck:.* updatecheck\&lt;br /&gt;
ebusd/bai/DCFTimeDate:.* { json2nameValue($EVENT, &#039;DCFTimeDate_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PumpPowerDesired:.* { json2nameValue($EVENT, &#039;PumpPowerDesired_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HwcImpellorSwitch:.* { json2nameValue($EVENT, &#039;HwcImpellorSwitch_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/ReturnTemp:.* { json2nameValue($EVENT, &#039;ReturnTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HwcStorageTempBottom:.* { json2nameValue($EVENT, &#039;HwcStorageTempBottom_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HwcTempDesired:.* { json2nameValue($EVENT, &#039;HwcTempDesired_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/FanPWMSum:.* { json2nameValue($EVENT, &#039;FanPWMSum_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HcHours:.* { json2nameValue($EVENT, &#039;HcHours_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HoursTillService:.* { json2nameValue($EVENT, &#039;HoursTillService_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PumpHwcFlowNumber:.* { json2nameValue($EVENT, &#039;PumpHwcFlowNumber_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/WP:.* { json2nameValue($EVENT, &#039;WP_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/WaterPressure:.* { json2nameValue($EVENT, &#039;WaterPressure_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PrimaryCircuitFlowrate:.* { json2nameValue($EVENT, &#039;PrimaryCircuitFlowrate_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/Flame:.* { json2nameValue($EVENT, &#039;Flame_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/Storageloadpump:.* { json2nameValue($EVENT, &#039;Storageloadpump_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/Status01:.* { json2nameValue($EVENT, &#039;Status01_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/FlowTempDesired:.* { json2nameValue($EVENT, &#039;FlowTempDesired_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/FrostOverRideTime:.* { json2nameValue($EVENT, &#039;FrostOverRideTime_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/Hc1ActualFlowTempDesired:.* { json2nameValue($EVENT, &#039;Hc1ActualFlowTempDesired_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/Hc1AutoOffMode:.* { json2nameValue($EVENT, &#039;Hc1AutoOffMode_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/Hc1CircuitType:.* { json2nameValue($EVENT, &#039;Hc1CircuitType_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/Hc1HeatCurve:.* { json2nameValue($EVENT, &#039;Hc1HeatCurve_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HcStorageTempBottom:.* { json2nameValue($EVENT, &#039;HcStorageTempBottom_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HcStorageTempTop:.* { json2nameValue($EVENT, &#039;HcStorageTempTop_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HolidayTemp:.* { json2nameValue($EVENT, &#039;HolidayTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/OpMode:.* { json2nameValue($EVENT, &#039;OpMode_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1RoomTemp:.* { json2nameValue($EVENT, &#039;z1RoomTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1SFMode:.* { json2nameValue($EVENT, &#039;z1SFMode_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1OpMode:.* { json2nameValue($EVENT, &#039;z1OpMode_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/Time:.* { json2nameValue($EVENT, &#039;Time_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/EbusVoltage:.* { json2nameValue($EVENT, &#039;EbusVoltage_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/extWP:.* { json2nameValue($EVENT, &#039;extWP_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/FanStarts:.* { json2nameValue($EVENT, &#039;FanStarts_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1NightTemp:.* { json2nameValue($EVENT, &#039;z1NightTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1DayTemp:.* { json2nameValue($EVENT, &#039;z1DayTemp_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HolidayStartPeriod:.* { json2nameValue($EVENT, &#039;HolidayStartPeriod_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/HolidayEndPeriod:.* { json2nameValue($EVENT, &#039;HolidayEndPeriod_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Monday:.* { json2nameValue($EVENT, &#039;z1Timer.Monday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Tuesday:.* { json2nameValue($EVENT, &#039;z1Timer.Tuesday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Wednesday:.* { json2nameValue($EVENT, &#039;z1Timer.Wednesday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Thursday:.* { json2nameValue($EVENT, &#039;z1Timer.Thursday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Friday:.* { json2nameValue($EVENT, &#039;z1Timer.Friday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Sunday:.* { json2nameValue($EVENT, &#039;z1Timer.Sunday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/700/z1Timer.Saturday:.* { json2nameValue($EVENT, &#039;z1Timer.Saturday_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PrEnergyCountHc1:.* { json2nameValue($EVENT, &#039;PrEnergyCountHc1_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PrEnergyCountHwc1:.* { json2nameValue($EVENT, &#039;PrEnergyCountHwc1_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PrEnergySumHc1:.* { json2nameValue($EVENT, &#039;PrEnergySumHc1_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/PrEnergySumHwc1:.* { json2nameValue($EVENT, &#039;PrEnergySumHwc1_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/FanHours:.* { json2nameValue($EVENT, &#039;FanHours_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HcHours:.* { json2nameValue($EVENT, &#039;HcHours_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HwcHours:.* { json2nameValue($EVENT, &#039;HwcHours_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HcStarts:.* { json2nameValue($EVENT, &#039;HcStarts_&#039;, $JSONMAP) }\&lt;br /&gt;
ebusd/bai/HwcStarts:.* { json2nameValue($EVENT, &#039;HwcStarts_&#039;, $JSONMAP) }&lt;br /&gt;
attr vaillant setList HeizKennlinie:selectnumbers,0,.1,2,1,lin ebusd/700/Hc1HeatCurve/set $EVTPART1\&lt;br /&gt;
TagSolltemp:selectnumbers,15,1,25,1,lin ebusd/700/z1DayTemp/set $EVTPART1\&lt;br /&gt;
NachtSolltemp:selectnumbers,15,1,25,1,lin ebusd/700/z1NightTemp/set $EVTPART1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition eines DOIF-Devices zur Steuerung der Therme und Visualisierung der Daten. Es werden Readings und Befehle genutzt, die durch den MQTT2-Server der obigen Definition zur Verfügung gestellt werden. Einzelne Heizungswerte werden in bestimmten Intervallen über den publish-Befehl ausgelesen. Die Temperaturen der Zirkulation, des Vorlaufs und des Rücklaufs werden außerhalb der Therme mit 1-wire-Temperatursensoren über WLAN-ESP-Easy ausgelesen. Die Definition des Layouts über das Attribut uiTable ist unabhängig vom Auslesen der Werte, sie bezieht sich lediglich auf vorhandene Readings, die visualisiert werden sollen. Das Layout kann ebenso auf Readings aus anderen Devices der eigenen FHEM-Umgebung anpasst werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_vaillant DOIF ##{[+00:01];;foreach (qw(FanSpeed Flame PumpPower Storageloadpump PrimaryCircuitFlowrate FlowTempDesired PumpHours HcHours HcPumpStarts)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
{[+[1]:01];;foreach (qw(PrEnergySumHc1 PrEnergySumHwc1 HcHours HwcHours z1OpMode WaterPressure z1NightTemp z1DayTemp Hc1HeatCurve HwcLockTime HolidayStartPeriod HolidayEndPeriod)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{[+00:00:30];;foreach (qw(Flame PrimaryCircuitFlowrate)) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
init {[00:01];;foreach (qw(FanHours HcStarts HwcStarts )) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/bai/$_/get&amp;quot;)}\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hc&amp;quot;,int([?vaillant:PrEnergySumHc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;gesamt_hwc&amp;quot;,int([?vaillant:PrEnergySumHwc1_0_value]/10000)/10,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hc&amp;quot;,0,0);;\&lt;br /&gt;
  set_Reading(&amp;quot;diff_hwc&amp;quot;,0,0);;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
{if ([00:05|WE]) {fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayStartPeriod/set $mday.$month.$year&amp;quot;);;fhem_set(&amp;quot;MQTT2_FHEM_Server publish ebusd/700/BankHolidayEndPeriod/set $mday.$month.$year&amp;quot;)}}\&lt;br /&gt;
\&lt;br /&gt;
Timer {\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Monday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Tuesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Wednesday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Thursday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Friday/set 04:00;;09:00;;13:00;;22:00;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Sunday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
fhem_set &amp;quot;MQTT2_FHEM_Server publish ebusd/700/z1Timer.Saturday/set 05:00;;10:00;;12:00;;22:30;;-:-;;-:-&amp;quot;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
diff {\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hc&amp;quot;,int(([vaillant:PrEnergySumHc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
 set_Reading(&amp;quot;diff_hwc&amp;quot;,int(([vaillant:PrEnergySumHwc1_0_value]/100000-get_Reading(&amp;quot;gesamt_hwc&amp;quot;,0))*10)/10,1);;\&lt;br /&gt;
}\&lt;br /&gt;
&lt;br /&gt;
attr di_vaillant event-on-change-reading .*&lt;br /&gt;
attr di_vaillant uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TABLE=&#039;text-align:center;;&#039;;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_uring(&amp;quot;0,0,1&amp;quot;,&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,undef,undef,&amp;quot;bar&amp;quot;,1,100,[(0.8,0,1,60,1.5,120,1.7,60,3,0)])|\&lt;br /&gt;
icon_ring(&amp;quot;sani_floor_heating_neutral&amp;quot;,[vaillant:HcHours_hoursum2_value],0,10000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
card([vaillant:Aussentemp:col],&amp;quot;Außentemperatur&amp;quot;,&amp;quot;temp_outside&amp;quot;,-15,35,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([vaillant:WWSpeicher:col],&amp;quot;WW-Speicher&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],&amp;quot;Zirkulation&amp;quot;,([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Vorlauf:Temperature:col],&amp;quot;Vorlauf&amp;quot;,([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)\&lt;br /&gt;
card([vaillant:Umlaufmenge:col],&amp;quot;Umlaufmenge&amp;quot;,&amp;quot;sani_pump&amp;quot;,0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
card([ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col],&amp;quot;Rücklauf&amp;quot;,&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,15,70,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue)\&lt;br /&gt;
card([$SELF:diff_hc:col],&amp;quot;Energie Heizung&amp;quot;,&amp;quot;sani_floor_heating_neutral&amp;quot;,0,200,120,0,&amp;quot;kWh&amp;quot;,undef,1)|\&lt;br /&gt;
card([$SELF:diff_hwc:col],&amp;quot;Energie Warmwasser&amp;quot;,&amp;quot;sani_water_tap&amp;quot;,0,20,120,0,&amp;quot;kWh&amp;quot;,undef,1)&amp;lt;\&lt;br /&gt;
\&lt;br /&gt;
icon_ring(&amp;quot;time_graph&amp;quot;,[vaillant:HeizKennlinie],0.4,1,120,0,&amp;quot;HK&amp;quot;,1,110)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_day\@yellow&amp;quot;,[vaillant:TagSolltemp],undef,undef,110)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;scene_night\@#3464eb&amp;quot;,[vaillant:NachtSolltemp],undef,undef,110)\&lt;br /&gt;
\&lt;br /&gt;
widget([vaillant:HeizKennlinie],&amp;quot;selectnumbers,0.4,.1,1,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:TagSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)|widget([vaillant:NachtSolltemp],&amp;quot;selectnumbers,15,1,25,1,lin&amp;quot;,&amp;quot;set&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Di uiTable Heizung.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [[FRITZBOX]] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [[FRITZBOX|FritzBox-Modul]]&lt;br /&gt;
* ui_Table Funktion [[DOIF/uiTable Schnelleinstieg#Icon-Darstellung mit Text mit Hilfe der Funktion icon_label|icon_label]]&lt;br /&gt;
*[[DOIF/uiTable Schnelleinstieg#uiTable-Templates|uiTable-Templates]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weitere Anwendungsbeispiele zur Automatisierung ===&lt;br /&gt;
* siehe [[DOIF/Automatisierung]]&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=34992</id>
		<title>DOIF/uiTable Schnelleinstieg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/uiTable_Schnelleinstieg&amp;diff=34992"/>
		<updated>2021-02-20T17:24:36Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Rand-Notiz icon_ring: Parameter $dec gehört hinter $unit wie im Beispiel auch gezeigt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:UiTable state screen.png|700px|rechts|Webansicht bestehend aus mehreren DOIF/uiTable-Definitionen]]&lt;br /&gt;
An dieser Stelle wird das DOIF-Web-Interface erklärt, welches über das DOIF-Attribut &#039;&#039;&#039;uiTable&#039;&#039;&#039; realisiert wurde. &lt;br /&gt;
&lt;br /&gt;
Abhängig von der Art der Funktion können in einer tabellarischen Darstellung FHEM-Geräte visualisiert und über die Web-Oberfläche bedient werden. Eventbasierte Änderungen visualisierter Readings werden unmittelbar in der Web-Ansicht aktualisiert. Eine erstellte Tabelle erscheint unterhalb der Statuszeile des DOIFs. Das uiTable-Attribut kann in bereits bestehenden DOIFs oder in funktionslosen DOIFs, wie in den unteren Beispielen, als reines WEB-Interface erstellt werden. In der Abbildung rechts ist ein Statusbildschirm aus vier Spalten mit mehreren DOIF/uiTable-Definitionen aufgebaut worden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Darstellungsmöglichkeiten werden anhand von Beispielen insb. mit Hilfe bereits im DOIF-Modul vordefinierter uiTable-Funktionen aufgezeigt. Diese Perlfunktionen sind in einem eigenen Package namens &#039;ui_Table&#039; definiert worden. Mit Hilfe dieser Funktionen lassen sich recht einfach, ohne tiefere HTML/CSS-Kenntnisse, eigene Übersichten definieren. Im Anschluss werden typische &#039;&#039;&#039;[https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anwendungsbeispiele Anwendungsbeispiele]&#039;&#039;&#039; aufgezeigt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau des uiTable-Attributs ==&lt;br /&gt;
Im uiTable-Attribut wird in erster Linie die zu visualisierende Tabelle definiert. Optional können zuvor ein Perlblock sowie Templates definiert werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Aufbau des Attributs&#039;&#039;&#039;&lt;br /&gt;
* das uiTable-Attribut besteht aus drei Bereichen:&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Der_Perlblock Perlblock]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#uiTable-Templates Templates-Definitionen] &lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Die_Tabellendefinition Tabellendefinition]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Aufbaustruktur&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;lt;Perlblock, optional&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Templates-Definitionen, optional&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Tabellendefinition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Der Perlblock ===&lt;br /&gt;
Der Perlblock dient dazu das Layout der Tabelle zu beeinflussen sowie eigene uiTable-Funktionen zu definieren. Hier wird insb. das Package definiert, welches für die Tabellendefinition gilt. Ebenfalls können CSS-Variablen sowie Steuerungsattribute gesetzt werden. Der Perlblock beginnt und endet mit einer geschweiften Klammer.&lt;br /&gt;
==== CSS-Variablen und Steuerungsattribute ====&lt;br /&gt;
Mit Hilfe von CSS-Variablen kann das Layout der Tabelle beeinflusst werden. Die Steuerungsattribute beeinflussen die Statuszeile sowie die Detailansicht des DOIF-Moduls.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;CSS-Variablen und Steuerungsattribute&#039;&#039;&#039;&lt;br /&gt;
*Das Layout der gesamten Tabelle wird beeinflusst über die Variablendefinition: &#039;&#039;&#039;$TABLE=&amp;quot;&amp;lt;CSS-Attribute der Tabelle&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Spaltenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TC{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Spalten&amp;gt;&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
*Zeilenformatierungen werden beeinflusst mit Hilfe der Variablendefinition: &#039;&#039;&#039;$TR{Zeilenbereich}=&amp;quot;&amp;lt;CSS-Attribute der Zeilen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*einzelne Zellen werden beeinflusst mit Hilfe der Variablen: &#039;&#039;&#039;$TD{&amp;lt;Zellenbereich für Zeilen&amp;gt;}{&amp;lt;Zellenbereich für Spalten&amp;gt;}=&amp;quot;&amp;lt;CSS-Attribute der Zellen&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*für Zellen-, Spalten- und Zeilen-Bereich gilt: &#039;&#039;&#039;&amp;lt;Zahl&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;kommagetrennte Aufzählung&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;Bereich von..bis&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
*Der Status in der Statuszeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOSTATE=1&#039;&#039;&#039;&lt;br /&gt;
*Die Gerätezeile des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNODEVICELINE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Tabelle des DOIFs wird ausgeblendet mit &#039;&#039;&#039;$SHOWNOUITABLE = &amp;quot;&amp;lt;regex room&amp;gt;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
*Die Detailansicht wird umorganisiert mit &#039;&#039;&#039;$ATTRIBUTESFIRST=1&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bespieldefinition&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_bsp_layout DOIF ##&lt;br /&gt;
attr di_bsp_layout uiTable { ## Beginn des Perlblocks\&lt;br /&gt;
## CSS-Variablen\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle soll ein Hintergrundbild der Größe 300x300 Pixel haben\&lt;br /&gt;
$TABLE = &amp;quot;width:300px;; height:300px;; background-image:url(/fhem/www/pgm2/images/Grundriss.png);; background-size: 300px 300px;;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Zelle der ersten Zeile und der ersten Spalte soll rechts eine Rahmenlinie haben\&lt;br /&gt;
$TD{0}{0} = &amp;quot;style=&#039;border-right-style:solid;; border-right-width:10px&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die erste Zeile soll aus der Klasse &#039;odd&#039; sein und fett-Schrift haben\&lt;br /&gt;
$TR{0} = &amp;quot;class=&#039;odd&#039; style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2 bis 6 sollen zentriert sein\&lt;br /&gt;
$TC{1..5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die Spalten 2, 4 und 5 sollen zentriert sein\&lt;br /&gt;
$TC{1,3,5} = &amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## die letzte Spalte der Tabelle soll fett sein\&lt;br /&gt;
$TC{last} = &amp;quot;style=&#039;font-weight:bold&#039;&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
\## Steuerungsattribute\&lt;br /&gt;
\&lt;br /&gt;
\## Ausblenden des Status in der Statuszeile\&lt;br /&gt;
$SHOWNOSTATE=1;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Gerätezeile wird ausgeblendet in allen Räumen\&lt;br /&gt;
$SHOWNODEVICELINE = &amp;quot;.*&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Tabelle wird im Raum info ausgeblendet\&lt;br /&gt;
$SHOWNOUITABLE = &amp;quot;^info$&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
## Die Detailansicht wird umorganisiert, hilfreich beim Editieren längerer uiTable-Definitionen\&lt;br /&gt;
$ATTRIBUTESFIRST = 1;;\&lt;br /&gt;
} ## Ende des Perlblocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Tabellendefinition ===&lt;br /&gt;
==== Einfache Tabellendefinition ohne Funktionen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tabellendefinition&#039;&#039;&#039;&lt;br /&gt;
* eine Tabelle wird aus Zellen zusammengebaut&lt;br /&gt;
* mehrere Zellen werden mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; von einander getrennt, sie bilden eine Tabellenzeile&lt;br /&gt;
* eine neue Tabellenzeile beginnt mit einer neuen Zeile in der Tabellendefinition&lt;br /&gt;
* eine Tabellenzeile kann auch in mehreren Zeilen definiert werden, diese müssen dann mit &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; enden&lt;br /&gt;
* Texte werden in Anführungszeichen angegeben&lt;br /&gt;
* Readings werden in der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] angegeben&lt;br /&gt;
* Kommentare beginnen mit ## und enden mit Zeilenende&lt;br /&gt;
* Events eines definierten Readings, führen sofort zu Aktualisierung seines Inhalts in der visualisierten Tabelle&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_definition DOIF ##&lt;br /&gt;
attr ui_Table_definition uiTable { ## Perlblock für globale Tabellendefinitionen\&lt;br /&gt;
 \&lt;br /&gt;
 $TC{1..2}=&amp;quot;align=&#039;center&#039;&amp;quot; ## zentrierte Ausrichtung der zweiten und dritten Spalte\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot;|&amp;quot;Vorlauf&amp;quot;|&amp;quot;Rücklauf&amp;quot;   ## erste Tabellenzeile\&lt;br /&gt;
									## zweite Tabellenzeile\&lt;br /&gt;
[T_Warmwasserspeicher:temperature]| ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Vorlauf:temperature]|            ## Zeile wird fortgesetzt, da sie mit | endet\&lt;br /&gt;
[T_Ruecklauf:temperature]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Definition.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==== Tabellendefinition mit Berechnungen ====&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zellenauswertung&#039;&#039;&#039;&lt;br /&gt;
* jede Zelle der Tabelle wird über Perl ausgewertet&lt;br /&gt;
* Readingangaben der Form [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] werden in eine Perlfunktion übersetzt&lt;br /&gt;
* das Ergebnis des ausgewerteten Perlausdrucks wird ausgegeben&lt;br /&gt;
* in einer Zelle können beliebige Perlfunktionen genutzt werden&lt;br /&gt;
* Texte oder Funktionen können mit Punkt aneinander gehängt werden&lt;br /&gt;
* mit Komma werden Texte oder Werte untereinander dargestellt&lt;br /&gt;
* in einer Berechnung sollte ein Trigger in Form einer Readingangabe [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] vorkommen, sonst wäre das Ergebnis statisch und würde sich nicht ändern &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_calc DOIF ##&lt;br /&gt;
attr di_uiTable_calc uiTable ## Tabellendefinition\&lt;br /&gt;
&amp;quot;Differenz&amp;quot;|[T_Ruecklauf:temperature]-[T_Vorlauf:temperature]\&lt;br /&gt;
&amp;quot;Minimum&amp;quot;|minNum([TH_WZ_HM:measured-temp],[TH_Keller_HM:measured-temp])\&lt;br /&gt;
&amp;quot;Durchschnitt&amp;quot;|([T_Ruecklauf:temperature]+[T_Vorlauf:temperature])/2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable calc.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== FHEM-Widgets mit der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion ==&lt;br /&gt;
Alle in FHEM vorhanden Widgets können mit Hilfe der WID-Funktion genutzt werden. Bei häufiger Nutzung eines bestimmten Widgets bietet sich alternativ die Definition einer uiTable-Funktion (Typ 3) mit dem jeweiligen Widget an, siehe: [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eigene_uiTable-Funktionen_programmieren uiTable-Funktion]&lt;br /&gt;
{{Randnotiz|RNText=Widget-Funktion &#039;&#039;&#039;WID&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
WID(&amp;lt;Reading&amp;gt;,&amp;lt;FHEM-Widget&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Reading     # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;]&lt;br /&gt;
FHEM-Widget # Angabe des FHEM-Widgets&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Fhem-Widgets [https://wiki.fhem.de/wiki/FHEMWEB/Widgets wiki]&lt;br /&gt;
* Fhem-Widgets als [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Eigene_uiTable-Funktionen_programmieren uiTable-Funktion]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_WID DOIF ##&lt;br /&gt;
attr di_uiTable_WID uiTable ## FHEM-Widgets mit Hilfe der WID-Funktion\&lt;br /&gt;
&amp;quot;Widget&amp;quot;\&lt;br /&gt;
&amp;quot;Select&amp;quot;| WID([uhr:wochentag],&amp;quot;select,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag&amp;quot;)\&lt;br /&gt;
&amp;quot;Selectnumbers&amp;quot;| WID([motor:spannung],&amp;quot;selectnumbers,0,0.5,12,1,lin&amp;quot;)\&lt;br /&gt;
&amp;quot;Slider&amp;quot;| WID([bla:wert],&amp;quot;slider,0,5,100,1&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker RGB&amp;quot;| WID([Lampe:farbe],&amp;quot;colorpicker,RGB&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HSV&amp;quot;| WID([Lampe:farbe],&amp;quot;colorpicker,HSV&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker CT&amp;quot;| WID([Lampe:waerme],&amp;quot;colorpicker,CT,2000,10,6500&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker HUE&amp;quot;| WID([Lampe:farbe],&amp;quot;colorpicker,HUE,0,1,359&amp;quot;)\&lt;br /&gt;
&amp;quot;Colorpicker BRI&amp;quot;| WID([Lampe:helligkeit],&amp;quot;colorpicker,BRI,0,1,100&amp;quot;)\&lt;br /&gt;
&amp;quot;Time&amp;quot;| WID([start:zeit],&amp;quot;time&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable WID.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte uiTable-Funktionen ==&lt;br /&gt;
Typische Widgets bzw. Styles wurden als Perl-Funktionen im package ui_Table für eine einfache Tabellendefinition programmiert. Im folgenden wird näher auf die einzelnen uiTable-Funktionen eingegangen.&lt;br /&gt;
=== SVG-uiTable-Funktionen ===&lt;br /&gt;
SVG-uiTable-Funktionen sind skalierbare Widgets, die auf SVG-Elementen basieren. Bei allen SVG-Funktionen für Temperatur bzw. Feuchtigkeit wird die Einfärbung abhängig vom Temperatur- bzw. Feuchtigkeitswert mit Hilfe einer Zuordnungsfunktion bestimmt. &lt;br /&gt;
==== ring-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_ring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_ring/temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_ring/temp_mring ($temp_value,$temp_min,$temp_max,$size, $lightring,$lightnumber) &lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_ring room test2&lt;br /&gt;
attr di_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;außen&amp;quot;|temp_ring([Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;Warmwasser&amp;quot; |temp_mring([vaillant:WWSpeicher],15,70,110,90,100)\&lt;br /&gt;
&amp;quot;Vorlauf&amp;quot;| temp_mring([ESPEasy_ESP_Temp_Vorlauf:Temperature],15,45,100)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion wird der Ring einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_ring&#039;&#039;&#039;-SVG-Funktion: &lt;br /&gt;
[[Datei:Farbskalierung hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mring&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_ring/hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_ring/hum_mring ($hum_value,$size,$lightring,$lightnumber) &lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_ring DOIF ##&lt;br /&gt;
attr di_hum_ring room test2&lt;br /&gt;
attr di_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|hum_mring([Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|hum_ring([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|hum_mring([Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($value,$min,$max,$minColor,$maxColor,$unit, $size,$colorFunc,$dec,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$dec       # Anzahl der dargestellten Nachkommastellen, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$ligh      # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring DOIF ##&lt;br /&gt;
attr di_ring uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|ring([heizung:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|ring([heizung:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;,100)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_ring ([Aussensensor:temperature],-20,60,100)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|ring([Aussensensor:temperature],-20,60,undef,undef,&amp;quot;°C&amp;quot;,100,\&amp;amp;temp_hue)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperatur- bzw. Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_hum_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_hum_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_hum_ring ($temp_value,$hum_value,$temp_min,$temp_max,$size, $lightring,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$temp_value # Temperatur&lt;br /&gt;
$hum_value  # Feuchtigkeit&lt;br /&gt;
$temp_min   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size       # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_hum_ring DOIF ##&lt;br /&gt;
attr di_temp_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;klein aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,60,80)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß Zahlen aufgehellt&amp;quot;|temp_hum_ring([Aussensensor:temperature],[Aussensensor:humidity],undef,undef,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Temperaturwerten mit Hilfe der SVG-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe ist jeweils abhängig vom dargestellten Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar:&lt;br /&gt;
[[Datei:Farbskalierung temp_temp_ring_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_temp_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_temp_ring ($temp1_value,$temp2_value,$temp_min,$temp_max,$size, $lightring,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$temp1_value # erster Temperaturwert&lt;br /&gt;
$temp2_value # zweiter Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$size        # Größe der Grafik, optional, default=90&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_temp_temp_ring DOIF ##&lt;br /&gt;
attr di_temp_temp_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein, Ring augehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,60,80,50)\&lt;br /&gt;
&amp;quot;normal&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60)\&lt;br /&gt;
&amp;quot;groß, Zahlen aufgehellt&amp;quot;|temp_temp_ring([Vorlauf:Temperature],[Ruecklauf:Temperature],15,60,100,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_hum_temp_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige von zwei Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Werte kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;ring2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring2 ($value1,$min1,$max1,$minColor1,$maxColor1,$unit1,$size,$colorFunc1,$dec1,&lt;br /&gt;
       $value2,$min2,$max2,$minColor2,$maxColor2,$unit2,$colorFunc2,$dec2)&lt;br /&gt;
&lt;br /&gt;
$value1     # darzustellender Wert1&lt;br /&gt;
$min1       # minimaler Wert, optional, default=0&lt;br /&gt;
$max1       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor1  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor1  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit1      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc1 # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$dec1       # Anzahl der Dezimalstellen, optional, default = 1&lt;br /&gt;
...&lt;br /&gt;
Werte für den zweiten Wert entsprechend dem ersten Wert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc...&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor...&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor...&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_ring2 DOIF ##&lt;br /&gt;
attr di_ring2 uiTable {package ui_Table}\&lt;br /&gt;
## Stromstärke von 0 A bis 15 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Kapazität von 0 % bis 100 % in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Tesla&amp;quot;| ring2([tesla:Strom],0,16,120,0,&amp;quot;A&amp;quot;,120,undef,2,[tesla:Kapazitaet],0,100,0,120,&amp;quot;%&amp;quot;,undef,0)\&lt;br /&gt;
\&lt;br /&gt;
## Stromstärke von 0 A bis 2 A in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
## Spannung von 1 V bis 1.5 V in Farben von rot (hue:0) bis grün (hue:120)\&lt;br /&gt;
&amp;quot;Akku&amp;quot;| ring2([akku:Strom],0,2,120,0,&amp;quot;A&amp;quot;,120,undef,2,[akku:Spannung],1,1.5,0,120,&amp;quot;V&amp;quot;,undef,2)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;,&amp;quot;Taupunkt&amp;quot;| ring2([Aussensensor:temperature],-20,60,undef,undef,&amp;quot;°C&amp;quot;,120,\&amp;amp;temp_hue,1,[Aussensensor:dewpoint],0,30,undef,undef,&amp;quot;°C&amp;quot;,\&amp;amp;temp_hue,1)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:ring2_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== icon_ring-Funktionen ====&lt;br /&gt;
===== Farbskalierte Temperaturanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen temp_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Temperatur für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_ring/icon_temp_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperatur&lt;br /&gt;
$temp_min,   # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max,   # maximale Temperatur, optional, default=60&lt;br /&gt;
$size,       # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Heizung_temp DOIF ##&lt;br /&gt;
attr di_Heizung_temp uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_temp_ring(&amp;quot;temp_outside&amp;quot;,[vaillant:Aussentemp],-15,40)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Flame] eq &amp;quot;off&amp;quot;?&amp;quot;sani_boiler_temp\@white&amp;quot;:&amp;quot;sani_boiler_temp\@Darkorange&amp;quot;),[vaillant:Vorlauf],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:WWSpeicher],15,70)|\&lt;br /&gt;
icon_temp_mring(([Zirk] eq &amp;quot;off&amp;quot;?&amp;quot;sani_pump\@white&amp;quot;:&amp;quot;sani_pump\@Darkorange&amp;quot;),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(([vaillant:Pumpenstatus] eq &amp;quot;on&amp;quot; ? &amp;quot;sani_floor_heating\@Darkorange&amp;quot; : &amp;quot;sani_floor_heating_neutral\@white&amp;quot;),[ESPEasy_ESP_Temp_Vorlauf:Temperature],15,70)|\&lt;br /&gt;
icon_temp_mring(&amp;quot;sani_floor_heating_neutral\@white&amp;quot;,[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature],15,70)|&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktionen basieren auf den obigen hum_ring-Funktionen, zusätzlich wird ein SVG-Icon dargestellt. Die Farbe des Icons kann mit @ an den Iconnamen angehängt werden, ansonsten wird die Farbe der Feuchtigkeit für das Icon verwendet. Die Größe des Icons kann skaliert werden, ebenso kann die Positionen des Icons verschoben werden. &lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_ring/icon_hum_mring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_ring/icon_hum_mring ($icon,$hum_value,$size,$lightring,$lightnumber) &lt;br /&gt;
&lt;br /&gt;
$icon        # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value   # Feuchtigkeit&lt;br /&gt;
$size        # Größe der Grafik, optional, default=80&lt;br /&gt;
$lightring   # Helligkeit des Ringes (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_ring DOIF ##&lt;br /&gt;
attr di_icon_hum_ring room test5&lt;br /&gt;
attr di_icon_hum_ring uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;klein ohne Farbverlauf&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],60)\&lt;br /&gt;
&amp;quot;normal groß mit Farbverlauf&amp;quot;|icon_hum_ring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;groß ohne Farbverlauf aufgehellt&amp;quot;|icon_hum_mring(&amp;quot;weather_humidity&amp;quot;,[Aussensensor:humidity],100,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Icons mit einem Zahlenwert mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039; =====&lt;br /&gt;
Diese Funktion basiert auf der universellen ring-Funktion. Die Farbe des dargestellten Icons und des Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_ring&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ring ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$dec,$size, $colorFunc,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$dec       # Anzahl der dargestellten Nachkommastellen, optional, default = 1&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_ring DOIF ##&lt;br /&gt;
attr di_icon_ring uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_ring (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_ring (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0)|\&lt;br /&gt;
icon_ring (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_ring (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)\&lt;br /&gt;
icon_ring (([vaillant:Pumpenstatus] eq &amp;quot;4&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;)|\&lt;br /&gt;
icon_ring (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;)|\&lt;br /&gt;
icon_ring (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;)|\&lt;br /&gt;
icon_ring(&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_ring_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== bar-Funktionen ====&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;temp_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung temp_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;temp_bar/temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_bar/temp_mbar ($temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=75&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=70&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
&amp;quot;standard&amp;quot;|temp_bar([Aussensensor:temperature])&lt;br /&gt;
&amp;quot;heller&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|temp_mbar([Aussensensor:temperature])&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,undef,80)&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)&lt;br /&gt;
&amp;quot;hoch&amp;quot;|temp_bar([Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_bar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_bar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
Farbskalierung der &#039;&#039;&#039;hum_mbar&#039;&#039;&#039;-SVG-Funktion:&lt;br /&gt;
[[Datei:Farbskalierung hum_mbar_scaling.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;hum_bar/hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum_bar/hum_mbar ($hum_value,$header,$width,$height,$size, $light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$hum_value  # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=75&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=70&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light    # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_hum_bar DOIF ##&lt;br /&gt;
attr di_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|hum_bar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|hum_mbar([Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|hum_bar([Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|hum_bar([Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes kann abhängig vom Wert bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;bar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($value,$min,$max,$header,$minColor,$maxColor,$unit,$width, $height,$size,$colorFunc,$dec,$gradient,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 75&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 70&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$dec       # Anzahl der dargestellten Nachkommastellen, optional, default = 1&lt;br /&gt;
$gradient  # Farbverlauf, optional, undef mit Farbverlauf, 1 ohne Farbverlauf, default = undef&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{package ui_Table}&lt;br /&gt;
defmod di_bar DOIF ##&lt;br /&gt;
attr di_bar uiTable {package ui_Table}\&lt;br /&gt;
## von 0 bis 20 in Farben von grün (hue:120) bis rot (hue:0)\&lt;br /&gt;
&amp;quot;Umlaufmenge&amp;quot;|bar([heizung:Umlaufmenge],0,20,&amp;quot;Umlauf&amp;quot;,120,0,&amp;quot;l/min&amp;quot;,75)\&lt;br /&gt;
\&lt;br /&gt;
## von 0 bis 3 in Farben von rot (hue:0) bis türkis (hue:180)\&lt;br /&gt;
&amp;quot;Wasserdruck&amp;quot;|bar([heizung:Wasserdruck],0,3,undef,0,180,&amp;quot;bar&amp;quot;,undef,80,100)\&lt;br /&gt;
\&lt;br /&gt;
## Temperaturdarstellung, entspricht dem Funktionsaufruf:\&lt;br /&gt;
## temp_bar ([Aussensensor:temperature],-20,60,undef,undef,55,100)\&lt;br /&gt;
&amp;quot;Temperatur&amp;quot;|bar([Aussensensor:temperature],-20,60,undef,undef,undef,&amp;quot;°C&amp;quot;,undef,55,100,\&amp;amp;temp_hue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== icon_bar-Funktionen ====&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Temperatur in Balkenform mit Hilfe der SVG-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_temp_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_temp_bar/icon_temp_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_temp_bar/icon_temp_mbar ($icon,$temp_value,$temp_min,$temp_max, $header,$width,$height,$size,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon      # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$temp_value  # Temperaturwert&lt;br /&gt;
$temp_min    # minimale Temperatur, optional, default=-20&lt;br /&gt;
$temp_max    # maximale Temperatur, optional, default=60&lt;br /&gt;
$header      # Überschrift, optional, default= undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=75&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=70&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light       # Helligkeit der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_temp_bar DOIF ##&lt;br /&gt;
attr di_icon_temp_bar room test10&lt;br /&gt;
attr di_icon_temp_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_temp_mbar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_temp_bar(&amp;quot;temp_outside&amp;quot;,[Aussensensor:temperature],undef,undef,undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_temp_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige der Feuchtigkeit in Balkenform mit Hilfe der SVG-Funktionen &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert. Die Helligkeit der Farbgebung ist einstellbar. Bei der &#039;&#039;&#039;icon_hum_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_hum_bar/icon_hum_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_hum_bar/icon_hum_mbar ($icon,$hum_value,$header,$width,$height,$size,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$icon       # &amp;quot;Iconname\@Farbe,Skalierungsfaktor,x-Position,y-Position&amp;quot;, \@Farbe, Skalierungsfaktor, x-Position, y-Position sind optional&lt;br /&gt;
$hum_value  # Temperaturwert&lt;br /&gt;
$header      # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$width       # Breite der Grafik, optional, default=75&lt;br /&gt;
$height      # Höhe der Grafik, optional, default=70&lt;br /&gt;
$size        # Größe der Grafik, optional, default=100&lt;br /&gt;
$light    # Helligkeit des der Grafik (0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_hum_bar DOIF ##&lt;br /&gt;
attr di_icon_hum_bar uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;standard&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;heller&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;monochrom&amp;quot;|icon_hum_mbar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity])\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,undef,80)\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],&amp;quot;Außen&amp;quot;)\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|icon_hum_bar(&amp;quot;temperature_humidity&amp;quot;,[Aussensensor:humidity],undef,undef,100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_hum_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
===== Farbskalierte Anzeige eines Zahlenwertes mit Hilfe der universellen SVG-Funktionen &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039; =====&lt;br /&gt;
Die Farbe des dargestellten Wertes und des Icons kann abhängig vom Wert bestimmt werden. Bei der &#039;&#039;&#039;icon_mbar&#039;&#039;&#039;-SVG-Funktion wird der Balken einfarbig dargestellt.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;icon_bar/icon_mbar&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
bar ($icon,$value,$min,$max,$minColor,$maxColor,$unit,$header, $width,$height,$size,$colorFunc,$dec,$light,$lightnumber)&lt;br /&gt;
&lt;br /&gt;
$value     # darzustellender Wert&lt;br /&gt;
$min       # minimaler Wert, optional, default=0&lt;br /&gt;
$max       # maximaler Wert, optional, default=100&lt;br /&gt;
$header    # Überschrift, optional, default = undef (keine)&lt;br /&gt;
$minColor  # Farbe (hue: 0-360) des kleinsten Wertes, optional, default = undef&lt;br /&gt;
$maxColor  # Farbe (hue: 0-360) des maximalen Wertes, optional, default = undef&lt;br /&gt;
$unit      # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width     # Breite der Grafik, optional, default = 75&lt;br /&gt;
$height    # Höhe der Grafik, optional, default = 70&lt;br /&gt;
$size      # Größe der Grafik, optional, default = 100&lt;br /&gt;
$colorFunc # Funktion, die zu einem Wert einen Farbwert (hue: 0-360) bestimmt, optional, default = undef&lt;br /&gt;
$dec       # Anzahl der dargestellten Nachkommastellen, optional, default = 1&lt;br /&gt;
$light     # Helligkeit der Grafik (light:0-100), optional, default=50&lt;br /&gt;
$lightnumber # Helligkeit der Zahl (light:0-100), optional, default=50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird &#039;&#039;&#039;$colorFunc&#039;&#039;&#039; nicht angegeben, so wird der Farbwert zwischen &#039;&#039;&#039;$minColor&#039;&#039;&#039; und &#039;&#039;&#039;$maxColor&#039;&#039;&#039; linear interpoliert&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_icon_bar_bsp DOIF ##&lt;br /&gt;
attr di_icon_bar_bsp uiTable {package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
icon_bar (&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],1.10,1.30,120,0,&amp;quot;€&amp;quot;,2)|\&lt;br /&gt;
icon_bar (&amp;quot;air&amp;quot;,[ESPEasy_Eingang_CO2:PPM],400,1200,120,0,&amp;quot;ppm&amp;quot;,0,undef,65)|\&lt;br /&gt;
icon_bar (&amp;quot;Zisterne&amp;quot;,([Wasserzisterne]/3.4),0,100,0,120,&amp;quot;%&amp;quot;,0)|\&lt;br /&gt;
icon_bar (([vaillant:Pumpenstatus] eq &amp;quot;off&amp;quot; ? &amp;quot;sani_buffer_temp_down\@Darkorange&amp;quot; : &amp;quot;sani_buffer_temp_down\@white&amp;quot;),[vaillant:Umlaufmenge],0,20,120,0,&amp;quot;l/min&amp;quot;,1,undef,80)\&lt;br /&gt;
icon_bar (&amp;quot;measure_water_meter&amp;quot;,[Wasserverbrauch:heute],0,600,120,0,&amp;quot;l&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;weather_barometric_pressure&amp;quot;,[vaillant:Wasserdruck],0,3,0,180,&amp;quot;bar&amp;quot;,1,undef,65)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_water_tap&amp;quot;,[vaillant:HwcHours_hoursum2_value],0,2000,120,0,&amp;quot;h&amp;quot;,0)|\&lt;br /&gt;
icon_bar (&amp;quot;sani_floor_heating_neutral&amp;quot;,[Heizenergie:Vortag_hc],0,150,120,0,&amp;quot;kWh&amp;quot;,1,undef,80)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:icon_bar_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== 3d-Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder&#039;&#039;&#039; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_cylinder DOIF ##&lt;br /&gt;
attr di_cylinder room Test,wiki&lt;br /&gt;
attr di_cylinder uiTable {package ui_Table}\&lt;br /&gt;
&amp;quot;normal&amp;quot;|cylinder(&amp;quot;&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Überschrift&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;kleiner&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,80,undef,80,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;hoch&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,undef)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit Beschriftung&amp;quot;|cylinder(&amp;quot;Zisterne&amp;quot;,0,100,&amp;quot;%&amp;quot;,undef,100,undef,0,[Wasserzisterne:state],200,&amp;quot;Wasserstand&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit mehreren Informationen&amp;quot;|cylinder(&amp;quot;Energie&amp;quot;,-20,30,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[zaehler:Bezug],0,&amp;quot;Bezug&amp;quot;,[zaehler:Produktion],60,&amp;quot;Produktion&amp;quot;,[zaehler:Eigenverbrauch],30,&amp;quot;Eigenverbrauch&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;mit hellen Farben&amp;quot;| cylinder(&amp;quot;Tag&amp;quot;,0,100,&amp;quot;kWh&amp;quot;,undef,undef,undef,1,[Heizenergie:Tagesverbrauch_hc]/100000,&amp;quot;30.100.70&amp;quot;,&amp;quot;letzter&amp;quot;,[Heizenergie:heute_hc]/100000,&amp;quot;60.100.70&amp;quot;,&amp;quot;aktuell&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
==== Balkendarstellung mehrerer Zahlenwerten mit Hilfe der universellen SVG-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039; ====&lt;br /&gt;
Es können mehrere Zahlenwerte mit Legende farbig in Balkenform visualisiert werden. Negative Werte werden als Balken nach unten dargestellt, positive nach oben, der Nullpunkt wird automatisch berechnet. Die &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;-SVG-Funkton besitzt die gleichen Argumente, wie die obige &#039;&#039;&#039;cylinder&#039;&#039;&#039;-SVG-Funktion, mehrerer Balken werden jedoch nicht übereinander, sondern nebeneinander dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=SVG-uiTable-Funktion &#039;&#039;&#039;cylinder_bars&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
cylinder_bars ($header,$min,$max,$unit,$width,$height,$size,$dec,($value1,$color1,$text1),($value2,$color2,$text2),...&lt;br /&gt;
&lt;br /&gt;
$header     # Überschrift&lt;br /&gt;
$min        # minimaler Wert, optional, default = 0&lt;br /&gt;
$max        # maximaler Wert, optional, default = 100&lt;br /&gt;
$unit       # Einheit des Wertes, optional, default = undef&lt;br /&gt;
$width      # Breite der Grafik, optional, default = wird bei Beschriftungen automatisch angepasst&lt;br /&gt;
$height     # Höhe der Grafik, optional, default = wird automatisch berechnet&lt;br /&gt;
$size       # Größe der Grafik, optional, default = 100&lt;br /&gt;
$dec        # Anzahl der Nachkommastellen, optional, default=1&lt;br /&gt;
$value1     # erster Zahlenwert&lt;br /&gt;
$color1     # HSL-Farbe des ersten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text1      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
$value2     # zweiter Zahlenwert, optional&lt;br /&gt;
$color2     # HSL-Farbe des zweiten Balkens: &amp;quot;&amp;lt;hue&amp;gt;.&amp;lt;saturation&amp;gt;.&amp;lt;lightness&amp;gt;&amp;quot; (hue:0-360,saturation:0-100,lightness:0-100), saturation (default:100) und lightness (default:50) sind optional&lt;br /&gt;
$text2      # Beschriftung des Zahlenwertes in der Legende, optional, default = undef&lt;br /&gt;
...&lt;br /&gt;
Es können weitere Zahlenwerte jeweils mit Farbe und Beschriftung optional angegeben werden &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_wasserverbrauch DOIF ##&lt;br /&gt;
attr di_wasserverbrauch uiTable {package ui_Table;;}\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:monatsdurchschnitt],30,&amp;quot;Durchschnitt&amp;quot;,[Wasserverbrauch:monatsverbrauch]/1000,220,&amp;quot;letzter&amp;quot;,[Wasserverbrauch:monat]/1000,180,&amp;quot;aktuell&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
cylinder_bars(&amp;quot;Monat&amp;quot;,0,15,&amp;quot;m³&amp;quot;,undef,undef,undef,1,[Wasserverbrauch:jan],30,&amp;quot;Januar&amp;quot;,[Wasserverbrauch:feb],220,&amp;quot;Februar&amp;quot;,[Wasserverbrauch:mrz],180,&amp;quot;März&amp;quot;,[Wasserverbrauch:apr],30,&amp;quot;April&amp;quot;,[Wasserverbrauch:mai],220,&amp;quot;Mai&amp;quot;,[Wasserverbrauch:jun],180,&amp;quot;Juni&amp;quot;,[Wasserverbrauch:jul],30,&amp;quot;Juli&amp;quot;,[Wasserverbrauch:aug],220,&amp;quot;August&amp;quot;,[Wasserverbrauch:sep],180,&amp;quot;September&amp;quot;,[Wasserverbrauch:okt],30,&amp;quot;Oktober&amp;quot;,[Wasserverbrauch:nov],220,&amp;quot;November&amp;quot;,[Wasserverbrauch:dez],180,&amp;quot;Dezember&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:cylinder_bars_bsp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Farbskalierte Temperaturanzeige mit Hilfe der Funktion &#039;&#039;&#039;temp&#039;&#039;&#039; ===&lt;br /&gt;
Die Farbe der dargestellten Temperatur ist abhängig vom Temperaturwert:&lt;br /&gt;
[[Datei:Farbskalierung temp.png|600px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp ($temp,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$temp # Temperatur&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_temp DOIF ##&lt;br /&gt;
attr di_uiTable_temp uiTable {\&lt;br /&gt;
  package ui_Table;;           ## Package für uiTable-Funktionen\&lt;br /&gt;
  $TC{0..2}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zentrierte Darstellung aller Tabellenspalten\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|&amp;quot;Bad&amp;quot;|&amp;quot;Warmwasser&amp;quot;                             ## mit | werden Tabellenzellen voneinander getrennt \&lt;br /&gt;
temp([Aussensensor:temperature])|                       ## Anzeige des Readings &#039;temperature&#039; des Gerätes &#039;Aussensensor&#039;  \&lt;br /&gt;
temp([TH_Bad_HM:measured-temp],24,&amp;quot;temp_temperature&amp;quot;)|  ## Schriftgröße 24pt, mit Icon namens temp_temperature\&lt;br /&gt;
temp([T_Warmwasserspeicher:temperature:d1],20)          ## Schriftgröße 20pt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Temp.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion &#039;&#039;&#039;hum&#039;&#039;&#039; ===&lt;br /&gt;
Die Farbe der dargestellten Feuchtigkeit ist abhängig vom Feuchtigkeitswert:&lt;br /&gt;
[[Datei:Farbskalierung hum.png|350px|ohne]]&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;hum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hum ($hum,$size,$icon)&lt;br /&gt;
&lt;br /&gt;
$hum  # Feuchtigkeit&lt;br /&gt;
$size # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$icon # Icon, welches vorangestellt wird, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hum DOIF ##&lt;br /&gt;
attr di_uiTable_hum uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
$TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## zweite Spalte der Tabelle zentriert\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition \&lt;br /&gt;
\&lt;br /&gt;
## Anzeige des Readings &#039;humidity&#039; des Thermostats &#039;TH_Bad_HM&#039;  \&lt;br /&gt;
&amp;quot;Bad&amp;quot;|hum ([TH_Bad_HM:humidity])\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 10pt mit Temperatur in einer Tabellenzelle\&lt;br /&gt;
&amp;quot;Aussen&amp;quot;|temp ([Aussensensor:temperature]),hum ([Aussensensor:humidity],10)\&lt;br /&gt;
\&lt;br /&gt;
## Feuchtigkeit in Größe 26pt mit Icon namens &#039;temperature_humidity&#039;\&lt;br /&gt;
&amp;quot;Keller&amp;quot;|hum ([TH_Keller_HM:humidity],26,&amp;quot;temperature_humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Funktion hum.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Textformatierungen mit Hilfe der Funktion &#039;&#039;&#039;style&#039;&#039;&#039; ===&lt;br /&gt;
Texte werden in Farbe, Größe und Schriftart statisch oder dynamisch formatiert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;style&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
style ($text,$color,$font_size,$font_weight)&lt;br /&gt;
&lt;br /&gt;
$text        # anzuzeigender Text&lt;br /&gt;
$color       # CSS color, optional&lt;br /&gt;
$font_size   # Schriftgröße in Pixel (pt), optional&lt;br /&gt;
$font_weight # CSS Schriftart, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;&#039;&#039;&#039;color&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;font_weight&#039;&#039;&#039;&#039;&#039; können in einschlägiger Dokumentation zu CSS nachgeschlagen werden&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_style DOIF ##&lt;br /&gt;
attr di_uiTable_style uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## statische Farbgebung, Größe, Schriftart \&lt;br /&gt;
style(&amp;quot;Montag&amp;quot;,&amp;quot;orange&amp;quot;)\&lt;br /&gt;
style(&amp;quot;Dienstag&amp;quot;,&amp;quot;red&amp;quot;,14)\&lt;br /&gt;
style(&amp;quot;Mittwoch&amp;quot;,&amp;quot;#00FFFF&amp;quot;,20)\&lt;br /&gt;
style(&amp;quot;Donnerstag&amp;quot;,&amp;quot;blue&amp;quot;,23,&amp;quot;bold&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(&amp;quot;Alarm&amp;quot;,([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## dynamische Farbgebung des Zustands des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style([Alarm:state],([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;red&amp;quot;:&amp;quot;green&amp;quot;))\&lt;br /&gt;
\&lt;br /&gt;
## variabler Text abhängig vom Zustand des Gerätes &#039;Alarm&#039;\&lt;br /&gt;
style(([Alarm:state] eq &amp;quot;on&amp;quot; ? &amp;quot;Alarm aktiv&amp;quot;:&amp;quot;Alarm deaktiviert&amp;quot;),&amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Style.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Icon-Darstellung mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039; kann ein FHEM-Icon dargestellt werden&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;ICON&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
ICON ($icon)&lt;br /&gt;
&lt;br /&gt;
$icon        # Icon mit Farbgebung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ICON&#039;&#039;&#039; benutzt die Funktion [https://wiki.fhem.de/wiki/DevelopmentFHEMWEB-API#FW_makeImage FW_makeImage]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#hsv-Funktion_f.C3.BCr_Farbskalierungen hsv-Funktion]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_Table_ICON DOIF ##&lt;br /&gt;
attr di_Table_ICON uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
ICON(&amp;quot;temp_frost&amp;quot;) |  ## Icon ohne Einfärbung\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@blue&amp;quot;) | ## Icon in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@#8A2BE2&amp;quot;) | ## Icon in CSS-Farbe #8A2BE2\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.([Aussensensor:temperature] &amp;gt; 0 ? &amp;quot;orange&amp;quot;:&amp;quot;blue&amp;quot;))| ## Icon in CSS-Farbe orange über Null Grad, sonst in CSS-Farbe blau\&lt;br /&gt;
ICON(&amp;quot;temp_frost\@&amp;quot;.hsv ([Aussensensor:temperature],-20,40,320,0)) ## Icon in Farbskalierung von violett (-20 °C) bis rot (40 °C) mit Hilfe der Funktion hsv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_IC.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Icon-Darstellung mit Text mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe der Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039; kann ein FHEM-Icon mit einem angehängten Text/Wert dargestellt werden.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon_label&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon_label ($icon,$text,$color,$color_bg,$pos_left,$pos_top)&lt;br /&gt;
$icon        # FHEM-Icon mit Farboption&lt;br /&gt;
$text        # dargestellter Text&lt;br /&gt;
$color       # Farbe des Textes, optional&lt;br /&gt;
$color       # Hintergrundfarbe des Textes, optional&lt;br /&gt;
$pos_left    # horizontale Position des Textes in px, default -5, optional&lt;br /&gt;
$pos_top     # vertikale Position des Textes in px, default -8, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzahl_der_Tage_bis_zur_Abfall-Entsorgung Abfall]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_aktueller_Spritpreis Sprit]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon_label DOIF ##&lt;br /&gt;
attr di_uiTable_icon_label uiTable { package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel])|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@blue&amp;quot;,[Tankstelle:Diesel],&amp;quot;blue&amp;quot;,&amp;quot;#999999&amp;quot;)|\&lt;br /&gt;
icon_label(&amp;quot;fuel\@red&amp;quot;,[Tankstelle:Diesel],&amp;quot;red&amp;quot;,&amp;quot;white&amp;quot;,-10)|\&lt;br /&gt;
icon_label(&amp;quot;fuel&amp;quot;,[Tankstelle:Diesel],&amp;quot;white&amp;quot;,&amp;quot;red&amp;quot;,-5,8)\&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable_icon_label.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Visualisierung eines Gerätes mit Hilfe der Funktion &#039;&#039;&#039;icon&#039;&#039;&#039; ===&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;icon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
icon ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # Wert &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_icon DOIF ##&lt;br /&gt;
attr di_uiTable_icon uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
 ## Standard-Icon off/on für Standardwert off/on \&lt;br /&gt;
&amp;quot;Lampe&amp;quot;|icon([Lampe:state])    ## entspricht icon([Lampe:state],&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;hue_room_hallway&#039;, für Zustand &#039;on&#039; &#039;hue_room_hallway\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Flur&amp;quot;|icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;)    ## entspricht icon([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;,&amp;quot;hue_room_hallway\DarkOrange&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;off&#039; ist &#039;status_away_2&#039;, für Zustand &#039;on&#039; &#039;status_available\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Anwesenheit&amp;quot;|icon([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Icon für Zustand &#039;closed&#039; ist &amp;quot;status_locked&amp;quot;, für Zustand &#039;open&#039; &#039;status_open\@DarkOrange&#039;\&lt;br /&gt;
&amp;quot;Haus&amp;quot;|icon([Schloss:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable icon.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Schaltbares Icon mit Hilfe der Funktion &#039;&#039;&#039;switch&#039;&#039;&#039; ===&lt;br /&gt;
Der Zustand eines Gerätes/Readings wird mit Hilfe eines Icons dargestellt, er kann über die WEB-Oberfläche durch Anklicken geschaltet werden. Damit der Zustand des Gerätes geschaltet werden kann, muss das Gerät den set-Befehl unterstützen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;switch&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
switch ($value,$icon_off,$icon_on,$state_off,$state_on)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$icon_off    # Icon für den Wert off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$icon_on     # Icon für den Wert on, default Icon für Wert &#039;off&#039; in Farbe &#039;DarkOrange&#039;, sonst Icon &#039;on&#039;, wenn $icon_off nicht definiert ist&lt;br /&gt;
$state_off   # Wert zugehörig zum Icon off, default &amp;quot;off&amp;quot;&lt;br /&gt;
$state_on    # Wert zugehörig zum Icon on, default &amp;quot;on&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_switch DOIF ##&lt;br /&gt;
attr di_uiTable_switch uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
## schaltbares Icons in der Webansicht \&lt;br /&gt;
switch([Lampe:state]) | \&lt;br /&gt;
switch([Lampeflur:state],&amp;quot;hue_room_hallway&amp;quot;) |\&lt;br /&gt;
switch([Anwesenheit:state],&amp;quot;status_away_2&amp;quot;,&amp;quot;status_available\@DarkOrange&amp;quot;)|\&lt;br /&gt;
switch([Haus:state],&amp;quot;status_locked&amp;quot;,&amp;quot;status_open\@DarkOrange&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;open&amp;quot;)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable switch.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== Rollladen: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Position des Rollladens (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Symbols steuert den Rollladen auf die entsprechende Position. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;shutter&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
shutter ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Rollladenposition, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # optional, Anzahl der Symbole 2 bis 6, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung_von_Rolll.C3.A4den Anwendungsbeispiel]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_shutter DOIF ##&lt;br /&gt;
attr ui_Table_shutter uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
shutter([R_Keller:pct],&amp;quot;\@yellow&amp;quot;,2)     ## zwei Symbole für 0 % und 100 %\&lt;br /&gt;
shutter([R_Wohnzimmer_S:pct])            ## entspricht shutter ([R_Wohnzimmer_S:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
shutter([R_Wohnzimmer_W1:pct],&amp;quot;blue&amp;quot;,4)  ## vier Symbole \&lt;br /&gt;
shutter([R_Wohnzimmer_W2:pct],&amp;quot;\@red&amp;quot;,5) ## fünf Symbole\&lt;br /&gt;
shutter([R_Wohnzimmer_W3:pct],&amp;quot;red&amp;quot;,6    ## sechs Symbole)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable shutter.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
===  Helligkeit: Visualisierung und Steuerung mit Hilfe der Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Helligkeit (0 % - 100 %) wird über Icons visualisiert. Das Anklicken eines Icons bestimmt die Helligkeit der Leuchte. Prozentwerte zwischen zwei Icon-Werten werden dem nächsthöheren Icon-Wert zugeordnet.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;dimmer&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
dimmer ($value,$color,$type)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der aktuellen Helligkeit, vorangestelltes @ verändert die Farbe des Icons, ohne @ wird der Hintergrund des Icons eingefärbt, default ist @DarkOrange&lt;br /&gt;
$type        # Anzahl der Symbole 2 bis 7, 3 ist default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_dimmer DOIF ##&lt;br /&gt;
attr di_uiTable_dimmer uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@yellow&amp;quot;,2)\&lt;br /&gt;
dimmer([Strauch3:pct]) ## entspricht dimmer([Strauch3:pct],&amp;quot;\@DarkOrange&amp;quot;,3) \&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;blue&amp;quot;,4)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;\@red&amp;quot;,5)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;red&amp;quot;,6)\&lt;br /&gt;
dimmer([Strauch3:pct],&amp;quot;DarkOrange&amp;quot;,7)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable dimmer.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
===  Vorgabetemperatur eines Thermostats mit Hilfe der Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Vorgabetemperatur eines Thermostats wird über ein Icons visualisiert. Durch Anklicken des Ringes wird die Vorgabetemperatur verändert.&lt;br /&gt;
{{Randnotiz|RNText=uiTable-Funktion &#039;&#039;&#039;temp_knob&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
temp_knob ($value,$color,$set)&lt;br /&gt;
&lt;br /&gt;
$value       # [&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;] &lt;br /&gt;
$color       # Farbe der voreingestellten Temperatur, default &amp;quot;Darkorange&amp;quot;&lt;br /&gt;
$set         # set-Befehl, default &amp;quot;set&amp;quot;, sonst muss &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot; angegeben werden, falls sich das Reading vom set-Befehl vom angezeigten Reading unterscheidet, wie beim THRESHOLD-Modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_temp_knob DOIF ##&lt;br /&gt;
attr ui_Table_temp_knob uiTable {\&lt;br /&gt;
package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat, angezeigt wird das Reading &amp;quot;desired-temp&amp;quot;, geschaltet wird über &amp;quot;set desired-temp&amp;quot; \&lt;br /&gt;
&amp;quot;Dachgeschoss&amp;quot;|temp_knob([TH_DG_HM:desired-temp]) ## entspricht temp_knob([TH_DG_HM:desired-temp],&amp;quot;Darkorange&amp;quot;,&amp;quot;set&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## HM-EU-Thermostat Temperaturanzeige in gelb \ &lt;br /&gt;
&amp;quot;Wohnzimmer&amp;quot;|temp_knob([TH_WZ_HM:desired-temp],&amp;quot;yellow&amp;quot;) \&lt;br /&gt;
\&lt;br /&gt;
## Beim THRESHOLD-Modul wird das Reading &amp;quot;desired_value&amp;quot; angezeigt, geändert wird die Temperatur per &amp;quot;set desired&amp;quot; \&lt;br /&gt;
&amp;quot;Küche&amp;quot;|temp_knob([TH_Kueche:desired_value],&amp;quot;red&amp;quot;,&amp;quot;set desired&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable temp knob.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  uiTable-&#039;&#039;&#039;Templates&#039;&#039;&#039; ==&lt;br /&gt;
Die Definition einer oder mehrere Zellen kann zu einem Template zusammengefasst werden. Durch die Nutzung von Templates kann die Definition einer Tabelle erheblich vereinfacht werden. Insb. bei gleichartigen Zellen/Zeilen für verschiedene Geräte/Readings braucht eine aufwendige Definition nicht immer wieder wiederholt werden, sondern kann jeweils mit dem Aufruf eines zuvor definierten Templates realisiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Templates&#039;&#039;&#039;&lt;br /&gt;
* Die Definition von Templates muss vor der Tabellendefinition vorgenommen werden&lt;br /&gt;
* Eine Template-Definition beginnt mit dem Schlüsselwort &#039;&#039;&#039;DEF&#039;&#039;&#039;&lt;br /&gt;
* Der Template-Name muss mit &#039;&#039;&#039;TPL_&#039;&#039;&#039; beginnen&lt;br /&gt;
* &#039;&#039;&#039;Template-Definition&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
DEF TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Zellendefinition mit Platzhaltern: $1,$2,...&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Templates-Definitionen können in externe Dateien ausgelagert werden&lt;br /&gt;
* Templates-Definitionen können per IMPORT-Befehl aus externen Dateien importiert werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Import&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
IMPORT &amp;lt;Pfad mit Dateinamen&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Innerhalb einer Tabellendefinition können zuvor definierte oder importierte Templates mehrfach genutzt werden&lt;br /&gt;
* &#039;&#039;&#039;Template-Aufruf&#039;&#039;&#039;-Syntax&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
TPL_&amp;lt;Template-Name&amp;gt;(&amp;lt;Übergabeparameter für $1&amp;gt;,&amp;lt;Übergabeparameter für $2&amp;gt;,...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod ui_Table_Template DOIF ##&lt;br /&gt;
attr ui_Table_Template uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{1..3}=&amp;quot;align=&#039;center&#039;&amp;quot;;; ## Spalten 1 bis 3 werden zentriert\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template-Definitionen beginnen vor der Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Das Template TPL_raum stellt eine Tabellenzeile dar, die mit Hilfe von uiTable-Funktionen mehrere Tabellenzellen definiert\&lt;br /&gt;
DEF TPL_raum (&amp;quot;$1&amp;quot; | temp([TH_$2_HM:measured-temp]),hum([TH_$2_HM:humidity]) | switch([H_$2:state],&amp;quot;fa_off&amp;quot;) | temp_knob([TH_$2_HM:desired-temp]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## pro Tabellenzeile wird ein Raum mit Hilfe des oben definierten Templates &amp;quot;TPL_raum&amp;quot; dargestellt\&lt;br /&gt;
&amp;quot;Raum&amp;quot;|&amp;quot;Temp./Feuchte&amp;quot;|&amp;quot;Ventil&amp;quot;|&amp;quot;Vorgabetemp.&amp;quot;\&lt;br /&gt;
TPL_raum (Dachgeschoss,DG)  ## der Übergabeparameter &amp;quot;Dachgeschoss&amp;quot; wird im Template &amp;quot;TPL_raum&amp;quot; anstelle von $1 eingesetzt, &amp;quot;DG&amp;quot; wird anstelle von $2 eingesetzt\&lt;br /&gt;
TPL_raum (Bad,Bad)\&lt;br /&gt;
TPL_raum (Kinderzimmer ost,Kz_o)\&lt;br /&gt;
TPL_raum (Kinderzimmer west,Kz_w)\&lt;br /&gt;
TPL_raum (Wohnzimmer,WZ)\&lt;br /&gt;
TPL_raum (Keller,Keller)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Templates.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
==  Eigene uiTable-Funktionen programmieren ==&lt;br /&gt;
Für die eigenen Bedürfnisse können eigene uiTable-Funktionen programmiert werden. In der Datei [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DOIF/uiTable.tpl contrib/DOIF/uiTable.tpl] befinden sich alle intern definierten uiTable-Funktion aus dem package ui_Table als Kopie. Diese Funktionen können als Inspiration für eigene Entwicklung dienen. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;uiTable-Funktionen&#039;&#039;&#039;&lt;br /&gt;
* Es gibt drei Arten von uiTable-Funktionen, sie werden intern anhand der Rückgabewerte unterschieden&lt;br /&gt;
* uiTable-Funktionen vom Typ 1: &#039;&#039;&#039;HTML&#039;&#039;&#039;, ein Rückgabewert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return(&amp;lt;HTML-code&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 2: &#039;&#039;&#039;Style&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;STY&#039;&#039;&#039;-Funktion), zwei Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return(&amp;lt;value&amp;gt;,&amp;lt;CSS-style&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen vom Typ 3: &#039;&#039;&#039;Widget&#039;&#039;&#039; (entspricht der &#039;&#039;&#039;WID&#039;&#039;&#039;-Funktion), vier Rückgabewerte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
return (&amp;lt;value&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;FHEM-widget&amp;gt;,&amp;lt;set-command: &amp;quot;set&amp;quot; or &amp;quot;set &amp;lt;Readingname&amp;gt;&amp;quot;&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* uiTable-Funktionen sind reine Perlfunktionen&lt;br /&gt;
* uiTable-Funktionen sollten im eigenen Package definiert werden, sonst könnten bestehende Perlfunktionen im System überschrieben werden&lt;br /&gt;
* uiTable-Funktionen können in Template-Dateien ausgelagert werden und über IMPORT-Befehl importiert werden, siehe Templates&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_function DOIF ##&lt;br /&gt;
attr di_uiTable_function uiTable {\&lt;br /&gt;
package my_uiTable;; ## eigenes Package mit selbstdefinierten Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ &amp;quot;HTML&amp;quot;, Rückgabewert: (HTML-code)\&lt;br /&gt;
\&lt;br /&gt;
sub clock { ## Anzeige aktueller Uhrzeit mit Datum\&lt;br /&gt;
            ## Voraussetzung: contrib/DOIF/doifclock.js muss ins www/pgm2-Verzeichnis kopiert werden\&lt;br /&gt;
            ## Attribut setzen in der Webinstanz: attr &amp;lt;WEB-Instanz&amp;gt; JavaScripts pgm2/doifclock.js \&lt;br /&gt;
  my ($color,$size)=@_;;\&lt;br /&gt;
  $color=&amp;quot;darkorange&amp;quot; if (!defined ($color));; ## $color ist optional, default Darkorange\&lt;br /&gt;
  $size=&amp;quot;20&amp;quot; if (!defined ($size));;           ## $size ist optional, default 20pt\&lt;br /&gt;
  return(&amp;quot;&amp;lt;div class=&#039;doifclock&#039;style=&#039;font-weight:bold;;font-size:&amp;quot;.$size.&amp;quot;pt;;color:&amp;quot;.$color.&amp;quot;;;&#039;&amp;gt;error&amp;lt;/div&amp;gt;&amp;quot;)\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Style, Rückgabewerte (Wert,CSS-style)\&lt;br /&gt;
\&lt;br /&gt;
sub red_green { ## Farbige Skalierung von Zahlen mit Hilfe der DOIF_hsv-Funktion: von 0 - rot bis 10 - grün\&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return ($value.&amp;quot; KW&amp;quot;,                                                   ## Wert/Text\&lt;br /&gt;
           &amp;quot;font-weight:bold;;color:&amp;quot;.::DOIF_hsv ($value,0,10,0,120,70,100) ## CSS-Style\&lt;br /&gt;
           );;\&lt;br /&gt;
} \&lt;br /&gt;
\&lt;br /&gt;
## uiTable-Funktion vom Typ Widget, Rückgabewerte (Wert,Leer,FHEM-Widget,set-Befehl)\&lt;br /&gt;
\&lt;br /&gt;
sub slider { ## FHEM-Widget Slider, weitere FHEM-Widgets siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets\&lt;br /&gt;
    my ($value,$set)=@_;;\&lt;br /&gt;
    $set=&amp;quot;set&amp;quot; if (!defined $set);;\&lt;br /&gt;
    return ($value,                   ## Zahlenwert\&lt;br /&gt;
            &amp;quot;&amp;quot;,                       ## leer\&lt;br /&gt;
            &amp;quot;slider,0,0.5,100,1&amp;quot;,     ## FHEM-Widget\&lt;br /&gt;
            $set                      ## set-Befehl des FHEM-Widgets\&lt;br /&gt;
            ) \&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
&amp;quot;Uhrzeit/Datum&amp;quot;\&lt;br /&gt;
clock(&amp;quot;yellow&amp;quot;,30)          ## obige Funktion clock\&lt;br /&gt;
&amp;quot;Dimmer&amp;quot;\&lt;br /&gt;
slider([Wohnzimmer:pct])    ## obige Funktion slider\&lt;br /&gt;
&amp;quot;Leistung&amp;quot;\&lt;br /&gt;
red_green([Leistung:state]) ## obige Funktion red_green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-functions.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Package-Konzept, Auslagerung eigener Funktionen, der &#039;&#039;&#039;IMPORT&#039;&#039;&#039;-Befehl==&lt;br /&gt;
uiTable arbeitet mit Packages. In einem Package sind definierte Funktionen gekapselt, sie kollidieren nicht mit bereits definierten Funktionen in FHEM.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Package&#039;&#039;&#039;&lt;br /&gt;
* das für die Definition der Tabelle gültige Package wird im Perlblock des uiTable-Attributes angegeben&lt;br /&gt;
* interne uiTable-Funktionen befinden sich im Package &#039;&#039;&#039;ui_Table&#039;&#039;&#039;&lt;br /&gt;
* ohne eine Angabe eines Package befindet man sich im Package &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
* Funktionen außerhalb des gültigen Package müssen mit &amp;lt;package-Name&amp;gt;::&amp;lt;Funktion&amp;gt; angegeben werden&lt;br /&gt;
* externe uiTable-Funktionen können per IMPORT-Befehl importiert werden&lt;br /&gt;
}} &lt;br /&gt;
=== Tabellendefinition im Package main ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel1 DOIF ##&lt;br /&gt;
attr beispiel1 uiTable ## keine Package-Definition im Perlblock\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package main\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package können unmittelbar angegeben werden\&lt;br /&gt;
FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:tempaerature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tabellendefinition im Package ui_Table ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel2 DOIF ##&lt;br /&gt;
attr beispiel2 uiTable {\&lt;br /&gt;
  package ui_Table; ## Package-Angabe im Perlblock\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem package angegeben werden, der Name main kann weggelassen werden\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene uiTable-Funktionen im eigenen Package ===&lt;br /&gt;
Diese Art der Definition bietet sich dann an, wenn man eine eigene uiTable-Funktion nur in einem DOIF nutzen möchte.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel3 DOIF ##&lt;br /&gt;
attr beispiel3 uiTable {\&lt;br /&gt;
  package $SELF;;  ## Package-Name ist der Name des DOIF-Moduls, dadurch ist der Package-Name eindeutig\&lt;br /&gt;
  sub scene_day {  ## eigene Funktion befindet sich im eigenen Package beispiel3\&lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition befindet sich im Package beispiel3\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne Funktionen aus dem ui_Table-Package müssen mit vorangestelltem Package ui_Table angegeben werden\&lt;br /&gt;
ui_Table::temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden\&lt;br /&gt;
scene_day()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eigene ausgelagerte uiTable-Funktionen ===&lt;br /&gt;
Möchte man das ui_Table-Package um eigene Funktionen erweitern, die man in verschiedenen DOIFs nutzen möchte, so sollte man diese in eine eigene Datei auslagern, die man mit dem IMPORT-Befehl vor der Definition der Tabelle importieren kann.&lt;br /&gt;
&lt;br /&gt;
Ausgelagerte Funktion in einer eigenen Datei z. B. my_uiTable.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{ ## Inhalt der Datei my_uiTable.tpl&lt;br /&gt;
  package ui_Table; ## das aktuelle Package  ist ui_Table&lt;br /&gt;
  sub scene_day {   ## eigene Funktion wird zum Package ui_Table hinzugefügt &lt;br /&gt;
    return (::FW_makeImage(&amp;quot;scene_day&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
  ## die Datei kann alle Funktionen beinhalten, die man in diversen DOIFs nutzen möchte&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod beispiel4 DOIF ##&lt;br /&gt;
attr beispiel4 uiTable ##\&lt;br /&gt;
\&lt;br /&gt;
IMPORT ./contrib/DOIF/my_uiTable.tpl ## nach dem Import befindet man sich in Package ui_Table erweitert um eigene Funktionen\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition befindet sich im Package ui_Table\&lt;br /&gt;
\&lt;br /&gt;
## Funktionen aus dem main-Package müssen mit vorangestelltem Package angegeben werden (der Name main kann weggelassen werden)\&lt;br /&gt;
::FW_makeImage(&amp;quot;scene_day&amp;quot;)\&lt;br /&gt;
\&lt;br /&gt;
## interne uiTable-Funktionen aus dem ui_Table-Package können direkt angegeben werden\&lt;br /&gt;
temp ([Aussensensor:temperature])\&lt;br /&gt;
\&lt;br /&gt;
## eigene Funktionen können direkt angegeben werden, da man sich bereits im Package uiTable befinden\&lt;br /&gt;
scene_day()\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  &#039;&#039;&#039;hsv&#039;&#039;&#039;-Funktion für Farbskalierungen==&lt;br /&gt;
Mit Hilfe der hsv-Funktion können Texte, Werte oder Icons abhängig vom Wert eingefärbt werden. Es wird durch Vorgabe von Farbsättigung (saturation) und Helligkeit (lightness), linear ein Farbton für einen bestimmten Wert errechnet. Den Farbwert HUE (0 - 360) für den kleinsten sowie größten Wert kann man mit Hilfe eines Color-Pickers bestimmen. Der Rückgabewert ist ein Farbwert in der CSS-Notation.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;hsv-Funktion für Farbskalierungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
hsv ($value,$min_value,$max_value,$min_hue,$max_hue,$saturation,$lightness)&lt;br /&gt;
$value      # Wert, Reading&lt;br /&gt;
$min_value  # der kleinste Wert, dieser entspricht dem Farbwert $min_hue&lt;br /&gt;
$max_value  # der größte Wert, dieser entspricht dem Farbwert $max_hue&lt;br /&gt;
$min_hue    # Farbwert für den kleinsten Wert $min_value&lt;br /&gt;
$max_hue    # Farbwert für den größten Wert $max_value&lt;br /&gt;
$saturation # Farbsättigung, default 100, optional&lt;br /&gt;
$lightness  # Farbhelligkeit, default 100, optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion befindet sich im ui_Table-Package&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinition&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_hsv DOIF ##&lt;br /&gt;
attr di_uiTable_hsv uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  ## eigene uiTable-Funktionen vom Typ 1 mit einem Rückgabewert als HTML-Code\&lt;br /&gt;
  \&lt;br /&gt;
  sub bat_icon { ## färbt das Icon &#039;measure_battery_100&#039; abhängig vom Wert mit Hilfe der Funktion hsv \&lt;br /&gt;
    my ($value)=@_;;\&lt;br /&gt;
    return(ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv($value,0,100,0,120,100,100)))\&lt;br /&gt;
  }\&lt;br /&gt;
   \&lt;br /&gt;
  sub bat_icon2 {## zusätzlich zum Farbwert wird ein entsprechendes Icon bestimmt\&lt;br /&gt;
    my($val)=@_;;\&lt;br /&gt;
	my $icon;;\&lt;br /&gt;
	if ($val==0) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_0&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=25) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_25&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=50) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_50&amp;quot;;;\&lt;br /&gt;
	} elsif ($val&amp;lt;=75) {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_75&amp;quot;;;\&lt;br /&gt;
	} else {\&lt;br /&gt;
	  $icon=&amp;quot;measure_battery_100&amp;quot;;;\&lt;br /&gt;
	}\&lt;br /&gt;
	\&lt;br /&gt;
	my $output=ICON(&amp;quot;$icon\@&amp;quot;.hsv ($val,0,100,0,120,90,100));;\&lt;br /&gt;
    return($output);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## eingefärbtes Icon 0 % entspricht rot (HSV-Wert 0), 100 % entspricht grün (HSV-Wert 120) mit Direktangabe\&lt;br /&gt;
1|ICON(&amp;quot;measure_battery_100\@&amp;quot;.hsv([bat:level],0,100,0,120,100,100))\&lt;br /&gt;
\&lt;br /&gt;
## gleiche Funktionalität mit Hilfe der oben definierten Funktion bat_icon \&lt;br /&gt;
2|bat_icon([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Icon mit Hilfe der oben definierten Funktion bat_icon2\&lt;br /&gt;
3|bat_icon2([bat:level])\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon\&lt;br /&gt;
4|bat_icon(0)|bat_icon(10)|bat_icon(20)|bat_icon(30)|bat_icon(40)|bat_icon(50)|bat_icon(60)|bat_icon(70)|bat_icon(80)|bat_icon(90)|bat_icon(100)\&lt;br /&gt;
\&lt;br /&gt;
## Beispiel für die Farbskaliereung von 0 bis 100 % mit der obigen Funktion bat_icon2\&lt;br /&gt;
5|bat_icon2(0)|bat_icon2(10)|bat_icon2(20)|bat_icon2(30)|bat_icon2(40)|bat_icon2(50)|bat_icon2(60)|bat_icon2(70)|bat_icon2(80)|bat_icon2(90)|bat_icon2(100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable DOIF hsv.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
== Eine for-Schleife mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls ==&lt;br /&gt;
Mit Hilfe des &#039;&#039;&#039;FOR&#039;&#039;&#039;-Befehls können über eine Schleife aus einer Liste mit Elementen mehrere Tabellenzellen definiert werden. Die Elementenliste (Array) kann über eine Funktion bestimmt werden. Auf diese Weise kann z. B. eine Tabelle für mehrere Geräte einfach definiert werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;FOR-Befehl&#039;&#039;&#039;&lt;br /&gt;
* Der FOR-Befehl entspricht einer foreach-Schleife in Perl&lt;br /&gt;
* Syntax: &#039;&#039;&#039;FOR (&amp;lt;Array&amp;gt;,&amp;lt;Zellendefinitionen&amp;gt;)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Array&amp;gt;&#039;&#039;&#039; eine gültige Angabe eines Arrays oder eine Perlfunktion, die ein Array liefert&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;Zellendefinitionen&amp;gt;&#039;&#039;&#039; Definition einer oder mehrerer Zellen, die Angabe $_ wird durch das jeweilige Element des Arrays ersetzt&lt;br /&gt;
*&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&amp;lt;br&amp;gt;[http://fhem.de/commandref_DE.html#DOIF_aggregation DOIF Aggregationsfunktionen mit Perlfunktion AggrDoIf]&amp;lt;br&amp;gt;[https://wiki.fhem.de/wiki/DevelopmentModuleAPI#devspec2array devspec2array]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Beispieldefinitionen&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Temperaturen aller Geräte, die mit &#039;T&#039; beginnen und ein Reading &#039;temperature&#039; haben, sollen in einer Tabelle visualisiert werden\&lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;^T_&#039;,&#039;temperature&#039;),&amp;quot;$_&amp;quot;|temp([$_:temperature:d2]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-temperature.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Batteriestatus aller Geräte, bei denen das Wort &#039;Fenster&#039; vorkommt, die das Readings &#039;battery&#039; haben\ &lt;br /&gt;
FOR(::AggrDoIf(&#039;@&#039;,&#039;Fenster&#039;,&#039;battery&#039;),&amp;quot;$_&amp;quot;|bat([$_:battery]))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-battery.png|200px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Anzeige des Status aller Geräte im System vom Typ &#039;HMS&#039;\&lt;br /&gt;
FOR(::devspec2array(&amp;quot;TYPE=HMS&amp;quot;),&amp;quot;$_&amp;quot;|[$_])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-HMS.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Elemente einer kommagetrennten Liste sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(split(&amp;quot;,&amp;quot;,&amp;quot;Mo,Di,Mi,Do,Fr,Sa,So&amp;quot;),ui_Table::style(&amp;quot;$_&amp;quot;,&amp;quot;Darkorange&amp;quot;)|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-split.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## Durch Leerzeichen getrennte Zeichenketten sollen jeweils in einer Tabellenzelle in einer Tabellenzeile angezeigt werden\&lt;br /&gt;
FOR(qw/Montag Dienstag Mittwoch Donnerstag Freitag/,&amp;quot;$_&amp;quot;|)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR-qw.png|300px|ohne]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_for DOIF ##&lt;br /&gt;
attr di_for uiTable \&lt;br /&gt;
## das Templates TPL_raum, soll vier mal aufgerufen werden: TPL_raum(1), TPL_raum(2)...\&lt;br /&gt;
## das Templates TPL_raum muss vorher definiert worden sein\&lt;br /&gt;
FOR(1..4,TPL_raum($_))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable-FOR TPL raum.png|600px|ohne]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Anwendungsbeispiele&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039; Visualisierung und Steuerung von &#039;&#039;&#039;Rollläden&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Im folgenden Beispiel werden Rollläden morgens hochgefahren, ebenso wird die Position aller Rollläden visualisiert. Durch Anklicken eines Icons wird der Rollladen auf die entsprechende Position bewegt. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* [https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen Zeitsteuerung]&lt;br /&gt;
* uiTable-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Rollladen:_Visualisierung_und_Steuerung_mit_Hilfe_der_Funktion_shutter shutter]&lt;br /&gt;
* uiTable-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Textformatierungen_mit_Hilfe_der_Funktion_style style]&lt;br /&gt;
* [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#uiTable-Templates Templates]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod DI_Rollladen DOIF (([Dunkelheit] eq &amp;quot;off&amp;quot; and [06:25-09:00|8]) or [09:00|7]) \&lt;br /&gt;
  ((set R_W_S,R_W_W[1-3] on)) ## Hochfahren der Rollläden im Erdgeschoss morgens\&lt;br /&gt;
DOELSEIF ([Dunkelheit] eq &amp;quot;on&amp;quot;)&lt;br /&gt;
attr DI_Rollladen cmdState oben|unten&lt;br /&gt;
attr DI_Rollladen devStateIcon unten:status_night oben:scene_day&lt;br /&gt;
attr DI_Rollladen icon fts_shutter_automatic&lt;br /&gt;
attr DI_Rollladen uiTable {\&lt;br /&gt;
   package ui_Table;;\&lt;br /&gt;
}\&lt;br /&gt;
\&lt;br /&gt;
## Template für ein Fenster\&lt;br /&gt;
DEF TPL_shutter(&amp;quot;$1&amp;quot;|shutter([$1:pct]))\&lt;br /&gt;
\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
style(&amp;quot;Dachgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Dachboden)\&lt;br /&gt;
style(&amp;quot;erstes Geschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Bad)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_O)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer1_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_S)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W1)\&lt;br /&gt;
TPL_shutter(R_Kinderzimmer2_W2)\&lt;br /&gt;
style(&amp;quot;Erdgeschoss&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Kueche)\&lt;br /&gt;
TPL_shutter(R_W_S)\&lt;br /&gt;
TPL_shutter(R_W_W1)\&lt;br /&gt;
TPL_shutter(R_W_W2)\&lt;br /&gt;
TPL_shutter(R_W_W3)\&lt;br /&gt;
style(&amp;quot;Keller&amp;quot;,&amp;quot;Darkorange&amp;quot;)|&amp;quot;&amp;quot;\&lt;br /&gt;
TPL_shutter(R_Keller)\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Ergebnis des Anwendungsbeispiels in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable Rollladen.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Anzahl der Tage bis zur &#039;&#039;&#039;Abfall-Entsorgung&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Mit Hilfe des Kalender-Moduls werden die verbleibenden Tage bis zur Abfall-Entsorgung der jeweiligen Tonne berechnet und mit Hilfe von uiTable visualisiert. Wenn der Tag der Entsorgung bevorsteht, wird er farbig gekennzeichnet. Vorausgesetzt wird die Definition des Kalenders namens &#039;cal&#039; mit Hilfe des Moduls [https://wiki.fhem.de/wiki/Calendar calendar]. Dieser muss die Termine der Abfallentsorgung der Tonnen beinhalten. Im Beispiel wird nach Stichwörtern: &amp;quot;Altpapier&amp;quot;, &amp;quot;Restmüll&amp;quot;, &amp;quot;Bio&amp;quot;, &amp;quot;Gelber&amp;quot; und &amp;quot;Grünschnitt&amp;quot; im Kalender gesucht. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* FHEM-Modul [https://wiki.fhem.de/wiki/Calendar calendar]&lt;br /&gt;
* ui_Table Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Text_mit_Hilfe_der_Funktion_icon_label icon_label]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Abfall DOIF subs {\&lt;br /&gt;
  ## Die Funktion &#039;days&#039; sucht nach dem Ereignis $event im Kalender und berechnet die Anzahl der verbleibenden Tage und legt sie im entsprechendem Reading $reading des DOIF-Moduls ab\&lt;br /&gt;
  sub days \&lt;br /&gt;
  {\&lt;br /&gt;
    my ($event,$reading)=@_;;\&lt;br /&gt;
    set_Reading($reading,fhem(&#039;get cal events timeFormat:&amp;quot;%j&amp;quot; filter:field(summary)=~&amp;quot;&#039;.$event.&#039;&amp;quot; limit:count=1,from=0 format:custom=&amp;quot;$T1&amp;quot;&#039;)-::strftime (&#039;%j&#039;, localtime()),1)\&lt;br /&gt;
  }\&lt;br /&gt;
  ## Die Funktion &#039;update&#039; bestimmt die verbleibenden Tage mit Hilfe der obigen Funktion &#039;days&#039; für die jeweiligen Tonnen\&lt;br /&gt;
  sub update\&lt;br /&gt;
  {\&lt;br /&gt;
    days(&amp;quot;Altpapier&amp;quot;,&amp;quot;altpapier&amp;quot;);;days(&amp;quot;Restmüll&amp;quot;,&amp;quot;restmuell&amp;quot;);;days(&amp;quot;Bio&amp;quot;,&amp;quot;bio&amp;quot;);;days(&amp;quot;Gelber&amp;quot;,&amp;quot;gelbe_tonne&amp;quot;);;days(&amp;quot;Grünschnitt&amp;quot;,&amp;quot;gruenschnitt&amp;quot;);;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Beim Start, um 02:00 Uhr und 08:00 Uhr wird zeitverzögert die obige Funktion &#039;update&#039; aufgerufen\&lt;br /&gt;
init {[02:00];;[08:00];;set_Exec(&amp;quot;Timer&amp;quot;,60,&#039;update()&#039;);;\&lt;br /&gt;
}&lt;br /&gt;
attr Abfall uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
 \&lt;br /&gt;
  ## die Funktion &#039;ic&#039; benutzt die Funktion &#039;icon_label&#039; für die Darstellung des Icons, abhängig von der Anzahl der Tage wird die Anzahl in grün bzw. rot eingefärbt \&lt;br /&gt;
  sub ic\&lt;br /&gt;
  {\&lt;br /&gt;
    my ($icon,$days)=@_;;\&lt;br /&gt;
    icon_label($icon,$days,&amp;quot;white&amp;quot;,$days &amp;gt; 1 ? &amp;quot;green&amp;quot;:&amp;quot;red&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition, die einzelnen Tonnen werden mit Hilfe der obigen Funkton &#039;ic&#039; dargestellt\&lt;br /&gt;
\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@yellow&amp;quot;,[$SELF:gelbe_tonne])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@blue&amp;quot;,[$SELF:altpapier])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne\@gray&amp;quot;,[$SELF:restmuell])|\&lt;br /&gt;
ic (&amp;quot;Abfalltonne-Recycling-Logo\@green&amp;quot;,[$SELF:bio])|\&lt;br /&gt;
ic (&amp;quot;Gartenabfall\@green&amp;quot;,[$SELF:gruenschnitt])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:Anwendungsbeispiel Abfall.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;offene Fenster&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* Attribut [https://fhem.de/commandref_DE.html#DOIF_DOIF_Readings DOIF_Radings]&lt;br /&gt;
* DOIF-[https://fhem.de/commandref_DE.html#DOIF_aggregation Aggregationsfunktionen]&lt;br /&gt;
* uiTable-Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Hilfe_der_Funktion_icon icon]&lt;br /&gt;
* &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_windows DOIF ## Visualisierung offener Fenster, Fenster-Devices enden mit &amp;quot;Fenster&amp;quot; im Namen&lt;br /&gt;
attr di_uiTable_windows DOIF_Readings windows:[@as(&amp;lt;br&amp;gt;)&amp;quot;Fenster$&amp;quot;:state:&amp;quot;open&amp;quot;,&amp;quot;keine&amp;quot;]&lt;br /&gt;
attr di_uiTable_windows uiTable {package ui_Table;;}\&lt;br /&gt;
icon([$SELF:windows],&amp;quot;fts_window_1w_open\@DarkOrange&amp;quot;,&amp;quot;fts_window_1w&amp;quot;,&amp;quot;.*&amp;quot;,&amp;quot;keine&amp;quot;)|[$SELF:windows]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable windows closed.png|mini|ohne]]&lt;br /&gt;
[[Datei:UiTable windows open.png|mini|ohne]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktuelle Wetterlage&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Regenrader animiert, aktuelle Temperatur und Feuchte vom Sensor, aktuelle Wetterlage sowie Wettervorhersage der nächsten Tage. Über entsprechende Weblinks werden Bilder aus dem WWW in der Tabelle visualisiert. Im Gegensatz zu lokalen Sensoren, muss für die Aktualisierung der WWW-Elemente in der jeweiligen Webinstanz (FHEMWEB) das refresh-Attribut gesetzt werden. &lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
* DWD [https://www.dwd.de/DE/Home/home_node.html Homepage]&lt;br /&gt;
* Regenradar [https://www.dwd.de/DE/wetter/wetterundklima_vorort/_node.html Radarfilm BRD]&lt;br /&gt;
* aktuelles Wetter [https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/nrw_node.html NRW]&lt;br /&gt;
* Wetteronline [https://www.wetteronline.de/wetter-widget eignes Widget]&lt;br /&gt;
* &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_wetter DOIF ##&lt;br /&gt;
attr di_uiTable_wetter uiTable {\&lt;br /&gt;
 package ui_Table;;\&lt;br /&gt;
 $TC{1}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## das Attribut &#039;refresh&#039; der Webinstanz für ein Wandtablet wurde auf 900 gesetzt, damit die Bilder alle 15 Minuten aktualisiert werden \&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
\&lt;br /&gt;
## Regenradar BRD\&lt;br /&gt;
&#039;&amp;lt;img src=&amp;quot;https://www.dwd.de/DWD/wetter/radar/radfilm_brd_akt.gif&amp;quot; height=&amp;quot;365px&amp;quot; width=&amp;quot;365px&amp;quot;&amp;gt;&#039;|\&lt;br /&gt;
\&lt;br /&gt;
## Aktuelle Temperatur und Feuchtigkeit vom lokalen sensor\&lt;br /&gt;
temp([Aussensensor:temperature],40),hum ([Aussensensor:humidity],30),\&lt;br /&gt;
\&lt;br /&gt;
## aktuelle Wetterlage NRW\&lt;br /&gt;
&amp;quot;&amp;lt;img src =&#039;https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/_functions/bildgalerie/wetter_aktuell.jpg?view=nasImage&amp;amp;nn=561200&#039; height=&#039;255px&#039; width=&#039;255px&#039;&amp;gt;&amp;quot;|\&lt;br /&gt;
\&lt;br /&gt;
## Wettervorhersage\&lt;br /&gt;
&amp;quot;&amp;lt;iframe marginheight=&#039;0&#039; marginwidth=&#039;0&#039; scrolling=&#039;no&#039; width=&#039;300&#039; height=&#039;365&#039; name=&#039;FC3&#039; style=&#039;border:1px solid;;border-color:#00537f;;&#039; src=&#039;https://api.wetteronline.de/wetterwidget?gid=x0677&amp;amp;modeid=FC3&amp;amp;seourl=juelich&amp;amp;locationname=Jülich&amp;amp;lang=de&#039;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;quot;\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable wetter.png|600px|links]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;aktueller Spritpreis&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Der aktuelle Spritpreis einer Tankstelle wird farbig mit einem eingefärben Icon visualisiert.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
*ui_Table Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Text_mit_Hilfe_der_Funktion_icon_label icon_label]&lt;br /&gt;
*[https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#hsv-Funktion_f.C3.BCr_Farbskalierungen hsv-Funktion]&lt;br /&gt;
*[https://www.clever-tanken.de Tankstelle bestimmen]&lt;br /&gt;
*[https://wiki.fhem.de/wiki/HTTPMOD HTTPMOD-Modul]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Zunächst wird ein HTTPMOD-Modul für den aktuellen Sprit definiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/22380 300&lt;br /&gt;
attr Tankstelle userattr reading01Name reading01Regex reading02Name reading02Regex&lt;br /&gt;
attr Tankstelle enableControlSet 1&lt;br /&gt;
attr Tankstelle reading01Name Diesel&lt;br /&gt;
attr Tankstelle reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle reading02Name SuperE5&lt;br /&gt;
attr Tankstelle reading02Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Tankstelle stateFormat Liter_Diesel: Diesel&lt;br /&gt;
attr Tankstelle timeout 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DOIF mit der Definition einer uiTable-Funktion namens &#039;&#039;&#039;sprit&#039;&#039;&#039;. Die Funktion kann ebenso in ein externes Package ausgelagert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod di_uiTable_sprit DOIF ##&lt;br /&gt;
attr di_uiTable_sprit uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..10}=&amp;quot;align=&#039;center&#039;;;&amp;quot;;;\&lt;br /&gt;
  \&lt;br /&gt;
  ## Die Funktion sprit färbt das Tankstellensymbol und den Spritpreis und stellt ihn mit Hilfe der Funktion icon_label dar\&lt;br /&gt;
  sub sprit {\&lt;br /&gt;
    my ($value,$min,$max)=@_;;\&lt;br /&gt;
    $min=1.16 if (!defined $min);; \&lt;br /&gt;
    $max=1.40 if (!defined $max);;  \&lt;br /&gt;
    return(icon_label (&amp;quot;fuel\@&amp;quot;.hsv ($value,$min,$max,120,0),$value,hsv ($value,$min,$max,120,0)));;\&lt;br /&gt;
  }\&lt;br /&gt;
}\&lt;br /&gt;
## Tabellendefinition\&lt;br /&gt;
&amp;quot;aktueller Spritpreis&amp;quot;\&lt;br /&gt;
sprit([Tankstelle:Diesel:d2])\&lt;br /&gt;
&amp;quot;Farbdarstellung&amp;quot;\&lt;br /&gt;
sprit(&amp;quot;1.18&amp;quot;)|sprit(&amp;quot;1.20&amp;quot;)|sprit(&amp;quot;1.25&amp;quot;)|sprit(&amp;quot;1.30&amp;quot;)|sprit(&amp;quot;1.35&amp;quot;)|sprit(&amp;quot;1.40&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Di uiTable sprit.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Visualisierung: &#039;&#039;&#039;Anwesenheitsstatus&#039;&#039;&#039;&#039;&#039; ===&lt;br /&gt;
Die aktuelle Anwesenheit von Heimbewohnern wird visualisiert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wird mit Hilfe des Moduls [https://wiki.fhem.de/wiki/FRITZBOX FritzBox] ein Device namens &#039;&#039;FritzBox&#039;&#039; erstellt. Dort werden die eingebuchten Smartphones der Bewohner mit Ihren MAC-Adressen in Readings abgelegt. Die folgende Definition wertet aus, ob die angegebenen MAC-Adressen als Readings vorhanden sind und erstellt für jeden Bewohner ein Reading mit den Zuständen on/off. Diese Readings werden dann über das Attribut uiTable visualisiert. Die anwesenden Personen werden farblich markiert. Die Namen der Personen sowie die MAC-Adressen sind fiktiv und müssen den eigenen Angaben entsprechend angepasst werden.&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;nützliche Links&#039;&#039;&#039;&lt;br /&gt;
*[https://wiki.fhem.de/wiki/FRITZBOX FritzBox-Modul] &lt;br /&gt;
*ui_Table Funktion [https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Text_mit_Hilfe_der_Funktion_icon_label icon_label]&lt;br /&gt;
*[https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#uiTable-Templates uiTable-Templates]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod myHome DOIF {\&lt;br /&gt;
 set_Reading_Begin;;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Ernie&amp;quot;,[FritzBox:mac_12_34_E0_00_CD_E4] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Bert&amp;quot;, [FritzBox:mac_02_08_02_07_30_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);;\&lt;br /&gt;
  set_Reading_Update(&amp;quot;Grobi&amp;quot;, [FritzBox:mac_00_08_01_0B_00_E7] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
  set_Reading_Update(&amp;quot;Kermit&amp;quot;, [FritzBox:mac_01_30_A9_72_02_E3] ? &amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;);; \&lt;br /&gt;
 set_Reading_End(1);;\&lt;br /&gt;
}&lt;br /&gt;
attr myHome checkReadingEvent 0&lt;br /&gt;
attr myHome uiTable {\&lt;br /&gt;
  package ui_Table;;\&lt;br /&gt;
  $SHOWNOSTATE=1;;\&lt;br /&gt;
  $TC{0..4}=&amp;quot;align=&#039;center&#039;&amp;quot;;;\&lt;br /&gt;
}\&lt;br /&gt;
## Template-Definition für die Visualisierung eines Bewohners mit Hilfe des Icons fa__508\&lt;br /&gt;
DEF TPL_person (icon_label([$SELF:$1] eq &amp;quot;on&amp;quot; ? &amp;quot;fa__508\@DarkOrange&amp;quot;:&amp;quot;fa__508&amp;quot;,&amp;quot;$1&amp;quot;,&amp;quot;#e67e00&amp;quot;,&amp;quot;white&amp;quot;,-10))\&lt;br /&gt;
\&lt;br /&gt;
## Darstellung der Bewohner mit Hilfe des obigen Templates\&lt;br /&gt;
TPL_person(Ernie)|TPL_person(Bert)|TPL_person(Grobi)|TPL_person(Kermit)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergebnis der Beispieldefinition in der Webansicht:&#039;&#039;&lt;br /&gt;
[[Datei:UiTable myHome.png|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
=== Weitere Anwendungsbeispiele zur Automatisierung ===&lt;br /&gt;
* siehe, [https://wiki.fhem.de/wiki/DOIF/Automatisierung DOIF-Automatisierung]&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* Weitere Beispiele für Fortgeschrittene, siehe &amp;quot;[[DOIF/uiTable|uiTable mit FHEM-Widgets und Styles]]&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=34735</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=34735"/>
		<updated>2021-02-07T10:09:30Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: ASC_Drive_DelayStart Typo; Unklarheit in der Beschreibung markiert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux ({{Link2FU|13684|Forum}}/[[Benutzer Diskussion:CoolTux|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der derzeit aktuelle Stand ist  diesem {{Link2Forum|Topic=112325|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;absent&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
* Optional:&lt;br /&gt;
** Ein Helligkeitssensor (Steuerung nach Helligkeit und Beschattung)&lt;br /&gt;
** Ein Device zur Bestimmung des Sonnenstands (nur für Beschattung). Unterstützt werden derzeit [[Modul Astro|Astro]] und [[Twilight]]&amp;lt;ref&amp;gt;Dabei müssen ggf. in [[Global|global]] auch Angaben zu &#039;&#039;longitude&#039;&#039; und &#039;&#039;latitude&#039;&#039; vorhanden sein&amp;lt;/ref&amp;gt;. &lt;br /&gt;
** Wenn Feiertage berücksichtigt werden sollen: Ein oder mehrere {{Link2CmdRef|Anker=holiday2we|Lang=en|Label=holiday2we}}-Angaben in [[Global|global]] samt entsprechender [[Wochenende, Feiertage und Schulferien#Feiertage mittels holiday-Datei|holiday]]-Dateien&amp;lt;ref&amp;gt;Es kann auch z.B. ein Dummy-Device verwendet werden, dieses sollte dann aber neben dem eigentlichen Feiertags-&#039;&#039;state&#039;&#039; auch in einem Reading &#039;&#039;tomorrow&#039;&#039; Angaben zu anstehenden Feiertagen enthalten.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Bitte verfahren Sie entsprechend, wenn Urlaubs- oder Ferientage wie Feiertage behandelt werden sollen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
Dabei geht man am einfachsten schrittweise vor und erweitert die Funktionalität nach und nach um die gewünschten Funktionen. Dann benötigt man jeweils nur einen kleinen Teil der vielen per Attribut einstellbaren Optionen, und kann die Auswirkungen der jeweiligen Änderung besser nachvollziehen. &lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
{{Hinweis|ASC kann auch verwendet werden, um lediglich Teilaufgaben der Rollladensteuerung zu erfüllen, also z.B. nur das morgendliche Öffnen der Rollläden. Allerdings geht dabei ein erheblicher Teil des Komforts verloren, der dadurch entsteht, dass die Steuerung innerhalb der vollintegrierten Lösung jeweils nachvollzieht, aus welchem Grund eine Fahrt erfolgt war und dies ggf. bei der nächsten Aktion berücksichtigt.}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Zunächst sollten die in den [[#Basics|Basics]] beschriebenen Geräte vorhanden und funktionsfähig sein. &lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;ASC&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese Attribute können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;ASC&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.&lt;br /&gt;
&lt;br /&gt;
Aus dieser Vorgabe leitet das Modul dann jeweils bestimmte Voreinstellungen (&#039;&#039;defaults&#039;&#039;) für den Rolladen ab, ohne dass die betreffenden, dafür vorgesehenen Attribute ausdrücklich gesetzt werden müssen. Es genügt daher, nur jeweils die Einstellungen zu verändern, die anders gewünscht werden oder für den Rollladenaktortyp anders sein müssen (z.B. &#039;&#039;dim 99&#039;&#039; für vollständiges Öffnen eines ZWave-Aktors).&lt;br /&gt;
{{Hinweis|Das Vorstehende gilt jeweils für den nicht-invertierten Modus! Wer z.B. ein HomeMatic-Gerät mit &#039;&#039;levelinverse&#039;&#039; betreibt, sollte &#039;&#039;ASC&#039;&#039; auf &amp;quot;1&amp;quot; setzen usw.. Maßgeblich ist letztlich nur die Frage, ob die Offen-Positionsangabe nummerisch kleiner oder größer als die Geschlossen-Positionsangabe ist; die konkreten Zahlenwerte spielen dabei keine Rolle, die Angabe &#039;&#039;position&#039;&#039; oder &#039;&#039;pct&#039;&#039; kann auch später über ein weiteres Attribut passend eingestellt werden.}}&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im ASC-Device selbst ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR /&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || || Zeit wird abhängig von der eingestellten Attribute ASC_Time_Up/ASC_Time_Down angezeigt. Bei &#039;&#039;astro&#039;&#039; die Uhrzeit des  Sonnenauf- oder Sonnenuntergang, bei &#039;&#039;time&#039;&#039; und &#039;&#039;brightness&#039;&#039; die Zeit aus ASC_Time_Up_Early/ASC_Time_Down_Late pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || || Position pro Rollonamen bevor ASC die Rolläden verfahren hat&lt;br /&gt;
|-&lt;br /&gt;
|..._PosValue || ||aktuelle Position pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|ascEnable||on, off ||globale ASC Steuerung bei den Rollläden aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|controlShading||on, off ||globale Beschattungsfunktion aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|hardLockOut || on, off ||Status des hardwareseitigen Aussperrschutzes / gilt nur für Rolläden mit dem Attribut bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist&lt;br /&gt;
|-&lt;br /&gt;
|selfDefense || on, off ||globale Selbstschutzfunktion aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || globaler Partymodus aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des ASC-Devices: active, enabled, disabled oder weitere Statusinformationen wie z.B. Grund der letzen Fahrt&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden, welche in den jeweiligen Räumen gefunden wurden, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||globale Wochenendunterstützung aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Das ASC-Modul verteilt an die gesteuerten Rollladen-Geräte diverse Benutzerattribute (userattr). In diesem Reading kann der Status dieser Verteilung geprüft werden.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings in den Rolllädendevices ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Enable ||Status von ASC_Enable (on,off)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersLastDrive ||Grund des letzten Fahrens des Rolladens&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveDown ||Zeit wird abhängig von der eingestellten Attribute ASC_Time_Down angezeigt. Bei astro die Uhrzeit des Sonnenuntergangs, bei time und brightness die Zeit aus /ASC_Time_Down_Late &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveUp ||Zeit wird abhängig von der eingestellten Attribute ASC_Time_Up angezeigt. Bei astro die Uhrzeit des Sonnenaufgangs, bei time und brightness die Zeit aus /ASC_Time_Up_Early&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==set- und get-Befehle für das ASC-Device==&lt;br /&gt;
&lt;br /&gt;
=== set-Anweisungen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR /&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|advDriveDown ||on, off ||holt bei allen Rollläden durch ASC_Adv on ausgesetzte Fahrten nach&lt;br /&gt;
|-&lt;br /&gt;
|ascEnable||on, off ||Aktiviert oder deaktiviert die globale ASC-Steuerung&lt;br /&gt;
|-&lt;br /&gt;
|controlShading||on, off ||Aktiviert oder deaktiviert die globale Beschattungssteuerung&lt;br /&gt;
|-&lt;br /&gt;
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an. (Diese Funktion steht nur zur Verfügung, wenn Attribut ASC_expert auf 1 gesetzt ist.)&lt;br /&gt;
|-&lt;br /&gt;
|hardLockOut ||on, off ||Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||Aktiviert den globalen Partymodus. Alle Rollladen-Geräten, in welchen das Attribut ASC_Partymode auf on gesetzt ist, werden durch ASC nicht mehr gesteuert. Der letzte Schaltbefehl, der bspw. durch ein Fensterevent oder Wechsel des Bewohnerstatus an die Rollläden gesendet wurde, wird beim Deaktivieren des Partymodus ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|renewAllTimer || ||erneuert bei allen Rollläden die Zeiten gemäß ASC_UP/ASC_DOWN und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|renewTimer || ||erneuert bei dem ausgewählten Rolladen die Zeiten gemäß ASC_UP/ASC_DOWN und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &#039;&#039;ASDC&#039;&#039; &#039;&#039;1&#039;&#039; oder &#039;&#039;2&#039;&#039; und legt diese im ASC-Modul an&lt;br /&gt;
|-&lt;br /&gt;
|selfDefence ||on, off||Aktiviert bzw. deaktiviert die Selbstschutzfunktion. Beispiel 1: Wenn das Residents-Gerät &#039;&#039;gone&#039;&#039; meldet, alle Rollläden dann heruntergefahren.  Beispiel 2 : Wenn das Residents-Gerät absent meldet, das Attribut ASC_ShuttersPlace=terrace ist und ein Fenster im Haus noch geöffnet ist, so wird an diesem Fenster der Rollladen  dann heruntergefahren.&lt;br /&gt;
|-&lt;br /&gt;
|shutterASCenableToggle ||  ||Aktivieren oder deaktivieren der ASC Kontrolle beim einzelnen Rollladens&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||Aktiviert die Wochenendunterstützung und somit, ob im Rollladen das Attribut ASC_Time_Up_WE_Holiday beachtet werden soll oder nicht.&lt;br /&gt;
|-&lt;br /&gt;
|wiggle ||||bewegt einen oder mehrere Rollläden um einen definierten Wert (Default: 5%) und nach einer Minute wieder zurück in die Ursprungsposition. Diese Funktion könnte bspw. zur Abschreckung in einem Alarmsystem eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get-Anweisungen ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diese Funktion wird primär fürs Debugging genutzt. Hierzu ist das Attribut ASC_expert = 1 zu setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Hinweis|Die Attributnamen haben sich teilweise geändert, nachfolgend ist der Stand von Modulversion v0.8.x wiedergegeben.}}&lt;br /&gt;
{{Hinweis|In der commandref findet sich häufig die Schreibweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ASC_BrightnessSensor Sensorname[:brightness [400:800]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Dabei sind die Angaben in den eckigen Klammern optional. Dies müssen also nicht angegeben werden, stattdessen verwendet das Modul dann Standardwerte (siehe cref), die in der cref zu findenden Angaben entsprechen dabei den defaults. Werden Werte angegeben, sind die eckigen Klammern &#039;&#039;&#039;wegzulassen&#039;&#039;&#039;! Beispiel: &amp;lt;code&amp;gt;ASC_BrightnessSensor hm_motion_1 70:100&amp;lt;/code&amp;gt; würde das brightness-Reading des Sensors hm_motion_1 verwenden und einen morgendlichen Schwellenwert von 70 bzw. 100 für abends.}}&lt;br /&gt;
===Attribute direkt am ASC-Device ===&lt;br /&gt;
&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;
|ASC_autoAstroModeEvening || ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON ||nach welchem ASTRO-Modus soll die Abendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || - 9 bis 9 || 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeEvening der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning || ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || nach welchem ASTRO-Modus soll die Morgendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || - 9 bis 9|| 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeMorning der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlComfort ||on, off || off ||schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate-Sensor am Fenster beim Öffnen in eine Offenposition fährt. Hierzu muss beim Rollladen das Attribut ASC_ComfortOpen_Pos entsprechend konfiguriert sein. &lt;br /&gt;
|- &lt;br /&gt;
|ASC_autoShuttersControlEvening ||on, off || ||Aktiviert die automatische Steuerung durch das ASC-Modul am Abend.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlMorning ||on, off || ||Aktiviert die automatische Steuerung durch das ASC-Modul am Morgen.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_blockASCDrivesAfterManual ||0, 1 || ||wenn dieser Wert auf 1 gesetzt ist, dann werden Rollläden vom ASC-Modul nicht mehr gesteuert, wenn zuvor manuell eingegriffen wurde. Voraussetzung hierfür ist jedoch, dass im Reading ASC_ShuttersLastDrive der Status manual enthalten ist und sich der Rollladen auf eine unbekannte (nicht in den Attributen anderweitig konfigurierte) Position befindet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessDriveUpDown || || || Werte (z.B. Lux) bei dem Schaltbedingungen für Sonnenauf- und -untergang geprüft werden sollen. Diese globale Einstellung kann durch die WERT-MORGENS:WERT-ABENDS Einstellung von ASC_BrightnessSensor im Rollladen selbst überschrieben werden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_debug ||0, 1 || 0||Aktiviert die erweiterte Logausgabe für Debugausgaben (nur nach Aufforderung nutzen) &lt;br /&gt;
|-&lt;br /&gt;
|ASC_expert ||0, 1 ||0 ||ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter &#039;&#039;set und get&#039;&#039; angezeigt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_freezeTemp ||-5 bis 5 || ||Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensor || || ||DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS] - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der &amp;quot;wegen Regen geschlossen Position&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDev  || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Devicenamen und Readingnamen des Residents-Device der obersten Ebene (z.B. rgr_Residents:state)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_shuttersDriveDelay  || || ||maximale Zufallsverzögerung in Sekunden bei der Berechnung der Fahrzeiten. 0 bedeutet keine Verzögerung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_tempSensor || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_twilightDevice || || ||das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_windSensor || || ||DEVICE[:READING] - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&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;
|ASC || 0, 1, 2|| ||&amp;quot;kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles&amp;quot;,1 = &amp;quot;Inverse oder Rollo - Bsp.: Rollo oben 0, Rollo unten 100 und der Befehl zum prozentualen Fahren ist position&amp;quot;,2 = &amp;quot;Homematic Style - Bsp.: Rollo oben 100, Rollo unten 0 und der Befehl zum prozentualen Fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Adv || on, off||||bei on wird das runterfahren des Rollos während der Weihnachtszeit (1. Advent bis 6. Januar) ausgesetzt! Durch set &amp;lt;ASCDEVICE&amp;gt; advDriveDown werden alle ausgesetzten Fahrten nachgeholt.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze ||off, soft, hard, am, pm || ||Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos, bei hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze_Pos || || ||Position des Rolllades die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist  !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || ||nach welchem ASTRO-Modus soll die Abendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || - 9 bis 9 || 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeEvening der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || || nach welchem ASTRO-Modus soll die Morgendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || - 9 bis 9|| 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeMorning der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_afterManual || ||1200 ||wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforeDayOpen || ||3600 ||wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforeNightClose || ||3600 ||ie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessSensor || ||none ||DEVICE[:READING] WERT-MORGENS:WERT-ABENDS / &#039;Sensorname[:brightness [400:800]]&#039; Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Closed_Pos || ||default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;||in 10er-Schritten von 0 bis 100 &lt;br /&gt;
wird angefahren wenn SelfDefense aktiv ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ComfortOpen_Pos || || || in 10er Schritten von 0 bis 100 !!! Die eingestellte Position wird bei einem threestate Sensor angefahren. Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Down || time, astro, brightness, roommate || astro||bei &#039;&#039;astro&#039;&#039; wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_DiveUpMaxDuration || || 60||die Dauer des Hochfahrens des Rollladens plus 5 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_Delay || || -1|| maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet keine Verzögerung, -1 bedeutet, dass das ??gleichwertige Attribut?? aus dem ASC Device ausgewertet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_DelayStart || || -1|| in Sekunden verzögerter Wert ab welchen dann erst das Offset startet und dazu addiert wird. Funktioniert nur wenn gleichzeitig ASC_DriveDelay gesetzt wird.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ExternalTrigger || |||| DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE, Beispiel: &amp;quot;WohnzimmerTV:state on:off 66:100&amp;quot; bedeutet das wenn ein &amp;quot;state:on&amp;quot; Event kommt soll das Rollo in Position 66 fahren, kommt ein &amp;quot;state:off&amp;quot; Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_GuestRoom || on, off |||| aktuell noch nicht umgesetzt...&lt;br /&gt;
|-&lt;br /&gt;
|ASC_LockOut || soft, hard, off ||off || stellt entsprechend den Aussperrschutz ein. Bei global aktivem Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rollladen oben. Dies gilt nur bei Steuerbefehlen über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich&lt;br /&gt;
|-&lt;br /&gt;
|ASC_LockOut_Cmd || inhibit, blocked, protection ||none|| set Befehl für das Rollladen-Device zum Hardware sperren. Dieser Befehl wird gesetzt werden, wenn man &amp;quot;ASC_LockOut&amp;quot; auf hard setzt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Down ||absent, always, off, home || always ||Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Up ||absent, always, off, home || always ||Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Open_Pos || ||default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;||in 10er-Schritten von 0 bis 100&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Partymode || on, off || off ||schaltet den Partymodus an oder aus. Wird am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und später erst ausgeführ&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent angibt. Wird bei unbekannten Device-Typen auch als &#039;&#039;set&#039;&#039; Befehl zum Fahren verwendet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDownValue_beforNightClose || || -1||wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDown_Pos || ||50||Position den Rollladens für den abendlichen Sichtschutz!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyUpValue_beforDay || || -1||wie viele Sekunden vor dem morgendlichen öffnen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:600 bedeutet 30 min vor day open oder bei über einem Brightnesswert von 600&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyUp_Pos || ||50||Position den Rollladens für den morgendlichen Sichtschutz!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_RainProtection ||on, off || ||soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Device || || none ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Rollladen-Raumes wiedergibt. Macht nur Sinn in Schlaf- oder Kinderzimmern&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Reading || || ||Reading des Roommate-Device, welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_AbsentDelay || || 300||um wie viele Sekunden soll das fahren in Selfdefense bei Residents absent verzögert werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_Mode || || gone||ab welchen Residents Status soll Selfdefense aktiv werden ohne das Fenster auf sind&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_InOutAzimuth || ||95:265 ||Azimut Wert ab dem bei Überschreiten Beschattet und bei Unterschreiten Endschattet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_MinMax_Elevation || ||25.0:100.0 ||ab welcher min Höhe des Sonnenstandes soll beschattet und ab welcher max Höhe wieder beendet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_MinOutsideTemperature_ || ||18 ||ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwert&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShadingMode ||absent, always, off, home || off||wann soll die Beschattung nur stattfinden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Pos || || ||Position des Rollladens für die Beschattung !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_StateChange_SunnyCloudy || ||35000:20000 ||Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_WaitingPeriod || ||1200 ||wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shutter_IdleDetection || ||||READING:VALUE gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo nicht fährt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist und das Residents-Device in den Status &#039;&#039;absent&#039;&#039; geht, &#039;&#039;selfDefence&#039;&#039; aktiv ist und das Fenster geöffnet ist, wird das Rollo  geschlossen. Wenn ein twostate Senso genutzt wird und dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist wird ASC_Ventilate_Pos ignoriert und das Rollo wird beim öffnen des Fenster komplett geöffnet. Wenn dieses Attribut auf &#039;&#039;window&#039;&#039; gesetzt ist wird ASC_Ventilate_Pos berücksichtigt und das Rollo wird entsprechend der ASC_Ventilate_Pos geöffnet. Wenn das Fenster wieder geschlossen wird, dann wird das Rollo unabhängig von &#039;&#039;windows oder terrace&#039;&#039; vollständig geschlossen.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Sleep_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC.&#039;&#039; Position wird angefahren wenn Bedingung für modeDown aktiv ist. Hiermit kann z.B. das komplette abendliche Schließen des Rollos begrenzt werden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_TempSensor || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Early || ||16:00 ||Sonnenuntergang frühste Zeit zum Runterfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Late || ||22:00 ||Sonnenuntergang späteste Zeit zum Runterfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Early || || 05:00||Sonnenaufgang frühste Zeit zum Hochfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Late || ||08:30 ||Sonnenaufgang späteste Zeit zum Hochfahren  !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_WE_Holiday || ||08:00 ||Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet).ACHTUNG!!! in Verbindung mit Brightness für ASC_Up muss die Uhrzeit kleiner sein wie die Uhrzeit aus ASC_Time_Up_Late !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!! &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Window_Open ||on, off ||on||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WiggleValue || ||5 ||Wert, um welchen sich die Position des Rollladens bei &#039;&#039;Wiggle&#039;&#039; ändern soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindParameters || ||5 ||TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: &#039;50:20 ClosedPosition&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindProtection ||on, off || ||soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec || ||none ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist. Reading ist optional&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_PosAfterDayClosed ||open, lastManual ||open ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. Sein Reading &#039;&#039;state&#039;&#039; muss die Werte &#039;&#039;open&#039;&#039;, &#039;&#039;closed&#039;&#039; oder &#039;&#039;tilted&#039;&#039; enthalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_subType ||twostate, threestate ||twostate||Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)&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;
| || || ||        &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
{{Hinweis|Die Device-Namen sind auf die eigene Installation anzupassen.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Codezeilen sind im [[Import von Code Snippets|RAW]]-Format.}}&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText= Stand 2019-05-03&lt;br /&gt;
* Erfolgreich getestet mit Homematic Devices, Beta-User&lt;br /&gt;
* Die Farbgebung entspricht dem Standard, wenn unter dem Style f18 der Farbpreset &#039;&#039;light&#039;&#039; gewählt wird.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Level ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Schliessen bis&amp;gt;,&amp;lt;Öffnen auf&amp;gt;,&amp;lt;Beschattung&amp;gt;,&amp;lt;Komfort&amp;gt;,&amp;lt;Lüften&amp;gt;,&amp;lt;Privacy&amp;gt; (Rollladen_.*|Jalousie_.*)..:level,!?ASC_Closed_Pos,!?ASC_Open_Pos,!?ASC_Shading_Pos,!?ASC_ComfortOpen_Pos,!?ASC_Ventilate_Pos,!?ASC_PrivacyDown_Pos&lt;br /&gt;
attr rg_ASC_Rolllaeden_Level commands {level =&amp;gt; &#039;pct:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:selectnumbers,0,5,100,0,lin&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Zeiten ===&lt;br /&gt;
[[Bild:ReadingsGroup ASC times.png|thumb|right|ReadingsGroup - Zeitenbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Up_WE/Hol&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; \&lt;br /&gt;
 (.*Rollo.*|.*Rollladen|Jalousie_.*):level,!?ASC_Time_Up_Early,!?ASC_Time_Up_Late,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;, \&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:55,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,  \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt; &#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;, \&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039; }&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC RG Zeiten HM ZWave Siro.png|thumb|right|ReadingsGroup - CUL_HM+ZWave+Siro mit widgets]]Neue Version mit time-Widgets und pct/dim/position-widget (5-er Schritte), passend für CUL_HM, ZWave und Siro-Geräte:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early  &amp;gt;,&amp;lt;Time_Up_WE  &amp;gt;,&amp;lt;Time_Up_Late  &amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rollo_.*|Jalousie_.*)..:(level|dim|position),!?ASC_Time_Up_Early,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Up_Late,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times commands {level =&amp;gt; &#039;pct:selectnumbers,0,5,100,0,lin&#039;, \&lt;br /&gt;
dim =&amp;gt; &#039;dim:selectnumbers,0,5,99,0,lin&#039;,\&lt;br /&gt;
position =&amp;gt; &#039;pct:selectnumbers,0,5,99,0,lin&#039;,\&lt;br /&gt;
ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:time&#039;, \&lt;br /&gt;
ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:time&#039;,\&lt;br /&gt;
ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:time&#039;, \&lt;br /&gt;
ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:time&#039;,\&lt;br /&gt;
ASC_Time_Up_WE_Holiday =&amp;gt;&#039;ASC_Time_Up_WE_Holiday:time&#039;}&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times room Rollladen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für die Beschattung ===&lt;br /&gt;
[[Bild:ReadingsGroup ASC shading.png|thumb|right|ReadingsGroup - Beschattungsbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;&lt;br /&gt;
defmod rg_ASC_Rolllaeden_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Richtung&amp;gt;,&amp;lt;°links&amp;gt;,&amp;lt;°rechts&amp;gt;,&amp;lt;Elevation&amp;gt;,&amp;lt;Sunny&amp;gt;,&amp;lt;Cloudy&amp;gt;,&amp;lt;Min Temp&amp;gt; (Rollo|Jalousie)_.*..:!?ASC_Shading_Mode,!?ASC_Shading_Pos,!?ASC_Shading_Direction,!?ASC_Shading_Angle_Left,!?ASC_Shading_Angle_Right,!?ASC_Shading_MinMax_Elevation,!?ASC_Shading_StateChange_Sunny,!?ASC_Shading_StateChange_Cloudy,!?ASC_Shading_Min_OutsideTemperature&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading alias Rollläden: Beschattung&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading commands {ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:knob,min:0,max:100,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:always,home,absent,off&#039;,\&lt;br /&gt;
ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:knob,min:0,max:360,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,cursor:true,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:knob,min:0,max:85,angleArc:85,rotation:anticlockwise,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:knob,min:0,max:85,angleArc:85,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,&#039;,\&lt;br /&gt;
ASC_Shading_MinMax_Elevation =&amp;gt; &#039;ASC_Shading_MinMax_Elevation:knob,min:0,max:35,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,lineCap:round,angleArc:120,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Sunny =&amp;gt; &#039;ASC_Shading_StateChange_Sunny:knob,min:100,max:40000,angleArc:85,rotation:anticlockwise,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:20,lineCap:round,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Cloudy =&amp;gt; &#039;ASC_Shading_StateChange_Cloudy:knob,min:100,max:40000,angleArc:85,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:20,lineCap:round,&#039;,\&lt;br /&gt;
ASC_Shading_Min_OutsideTemperature =&amp;gt; &#039;ASC_Shading_Min_OutsideTemperature:knob,min:5,max:30,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:0.5,lineCap:round,angleArc:120,angleOffset:270&#039;}&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Anderes {{Link2Forum|Topic=99980|Message=946357|LinkText=Foren-Beispiel}} für eine RG zu Beschattung (für V. 0.6.x):&lt;br /&gt;
[[Bild:ReadingsGroup ASC shading2.png|thumb|right|ReadingsGroup - Beschattungsbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;&lt;br /&gt;
defmod rg_ASC_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Grad&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Links&amp;gt;,&amp;lt;Rechts&amp;gt;,&amp;lt;Wait&amp;gt;,&amp;lt;ShadeIn&amp;gt;,&amp;lt;ShadeOut&amp;gt;,&amp;lt;Elevation&amp;gt;,&amp;lt;Temperature&amp;gt;,&amp;lt;Device&amp;gt;\&lt;br /&gt;
(Rollo_.*|Jalousie.*):!?ASC_Shading_Direction,!?ASC_Shading_Pos,!?ASC_Shading_Mode,!?ASC_Shading_Angle_Left,!?ASC_Shading_Angle_Right,!?ASC_Shading_WaitingPeriod,!?ASC_Shading_StateChange_Sunny,!?ASC_Shading_StateChange_Cloudy,!?ASC_Shading_MinMax_Elevation,!?ASC_Shading_Min_OutsideTemperature,!?ASC_BrightnessSensor\&lt;br /&gt;
&lt;br /&gt;
attr rg_ASC_Shading commands {ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:129,255,309&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:absent,always,off,home&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_WaitingPeriod =&amp;gt; &#039;ASC_Shading_WaitingPeriod:selectnumbers,0,60,1200,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Sunny =&amp;gt; &#039;ASC_Shading_StateChange_Sunny:selectnumbers,0,20,1000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Cloudy =&amp;gt; &#039;ASC_Shading_StateChange_Cloudy:selectnumbers,0,20,1000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_MinMax_Elevation =&amp;gt;\&lt;br /&gt;
&#039;ASC_Shading_Min_Elevation:selectnumbers,0,1,40,0,lin&#039; ,\&lt;br /&gt;
ASC_Shading_Min_OutsideTemperature =&amp;gt;\&lt;br /&gt;
&#039;ASC_Shading_Min_OutsideTemperature:selectnumbers,0,1,30,0,lin&#039;}&lt;br /&gt;
attr rg_ASC_Shading room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für FIBARO Roller Shutter FGR-222 Devices ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Getestet von majestro84, Stand 2019-01-28.&lt;br /&gt;
* https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099&lt;br /&gt;
* Die Farbgebung entspricht dem Standard, wenn unter dem Style f18 der Farbpreset &#039;&#039;dark&#039;&#039; gewählt wird}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC Jalousien Times.JPG|thumb|right|Beispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-break: break-all;word-wrap: break-word;&amp;quot;&amp;gt;define ASC_Jalousien_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt;,&amp;lt;PartyMode&amp;gt;,&amp;lt;LockOut&amp;gt; (.*_Jalousie.*):position,!?ASC_Time_Up_Early,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Up_Late,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up,!?ASC_Partymode,!?ASC_LockOut&lt;br /&gt;
&lt;br /&gt;
 attr ASC_Jalousien_Times commands {position =&amp;gt; &#039;dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,&lt;br /&gt;
 ASC_Partymode =&amp;gt; &#039;ASC_Partymode:on,off&#039;,&lt;br /&gt;
 ASC_LockOut =&amp;gt; &#039;ASC_LockOut:soft,hard,off&#039;,&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, &lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
 attr ASC_Jalousien_Times room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC Jalousien Level.JPG|thumb|right|Beispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-break: break-all;word-wrap: break-word;&amp;quot;&amp;gt; define Jalousien_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Comfort_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt;,&amp;lt;PrivacyDown_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt; (.*_Jalousie.*):!?ASC_Closed_Pos,!?ASC_Open_Pos,!?ASC_ComfortOpen_Pos,!?ASC_Ventilate_Pos,!?ASC_PrivacyDown_Pos,!?ASC_Shading_Pos&lt;br /&gt;
 attr Jalousien_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;}&lt;br /&gt;
 attr Jalousien_Level room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichtungsbeispiel (nach Sonnenstand) ==&lt;br /&gt;
=== Zielsetzung und Vorgaben ===&lt;br /&gt;
Es sollen alle Rollläden und Jalousien in einem Haus innerhalb bestimmter zeitlicher Grenzen Morgens und Abends sonnenstandsabhängig gefahren werden, an den Wochenenden und an Ferientagen soll etwas später geöffnet werden. Es sind Tür- und Fensterkontakte vorhanden (Türkontakte: twoState, Fensterkontakte: threeState), wobei bei jeder Öffnung ein eventuell geschlossener Rollladen geöffnet werden soll. Bei allen Rollladenaktoren, Tür- und Fensterkontakten handelt es sich um CUL_HM-Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Vorarbeiten ===&lt;br /&gt;
Im global-Device sind Angaben zu latitude und longitude vorhanden, holiday2we wie folgt&amp;lt;ref&amp;gt;&#039;&#039;ferien&#039;&#039; ist eine automatisiert erstellte holiday-Datei nach diesem {{Link2Forum|Topic=85759|Message=885883|LinkText=Foren-Beitrag}}.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr global holiday2we bw,ferien&lt;br /&gt;
Weitere Angaben benötigen wir zunächst nicht, die Festlegung eines Astro-Devices erfolgt hier erst im Rahmen der Beschattung. &lt;br /&gt;
Dann erfolgt das &#039;&#039;Define des ASC-Devices&#039;&#039; wie oben beschrieben:&lt;br /&gt;
&amp;lt;code&amp;gt;define Rollladenautomatik AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Folgen die einzubindenden Rollladenaktoren einem einheitlichen Namensschema, können diese sodann z.B. mit &lt;br /&gt;
 attr (Jalousie|Rollladen)_.* ASC 2&lt;br /&gt;
auf einen Rutsch mit dem passenden ASC-Typ gekennzeichnet werden.  &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Achtung: Das AutoShuttersControl-Device selbst darf kein ASC-Attribut bekommen!}}&lt;br /&gt;
&lt;br /&gt;
Dann verteilen wir mir &lt;br /&gt;
 set Rollladenautomatik scanForShutters&lt;br /&gt;
die nachfolgend weiter zu bearbeitenden Attribute.&lt;br /&gt;
=== Schließen morgens und abends ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Alternative: Fahren nach brightness:&lt;br /&gt;
Will man insgesamt oder nur an einzelnen Rollläden stattdessen helligkeitsgesteuert fahren, muß für jeden Rollladen ein Helligkeitssensor definiert und entweder zentral oder am einzelnen Rollladen jeweils ein Höchst- bzw. Mindestwert festgelegt werden (&#039;&#039;ASC_BrightnessSensor&#039;&#039; etc.), bei dessen Überschreitung geöffnet bzw. Unterschreitung geschlossen werden soll.}}&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
Da wir sonnenstandsabhängig Fahrzeiten wollen, legen wir erst einmal fest, dass dies morgens und abends berücksichtigt werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeEvening CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeMorning CIVIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aus der Angabe &#039;&#039;CIVIL&#039;&#039; und den Vorgaben in den einzelnen Rollladen wird dabei mit Hilfe von [[SUNRISE_EL]] die effektive Fahrzeit berechnet, dort finden sich auch weitere Hinweise, zu den meisten anderen Optionen für die ersten beiden Attribute.&lt;br /&gt;
Bei allen Fensteröffnungen soll auf eine Lüften-Position gefahren werden, also schalten wir diese Funktion ebenfalls zentral an&amp;lt;ref&amp;gt;Sonst wird bei threeState-Sensoren nur bei &#039;&#039;tilted&#039;&#039; auf die in &#039;&#039;ASC_Ventilate_Pos&#039;&#039; gefahren.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr Rollladenautomatik ASC_autoShuttersControlComfort on &lt;br /&gt;
Zuletzt legen wir noch einen Temperatur-Sensor fest. Dieser wird beim Frostschutz sowie bei der Beschattung berücksichtigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_tempSensor Aussentemperatur_Nord:temperature&lt;br /&gt;
attr Rollladenautomatik ASC_freezeTemp 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;{{Hinweis|Achtung: Für jede weitere Sensor-Information (z.B. zu Regen oder Wind) muß ein eigenes Device verwendet werden. Sollen unterschiedliche Readings desselben Sensors ausgewertet werden, müssen diese in ein eigenes Device übertragen werden, z.B. über einen readingsProxy mit gesetztem event-on-update-reading-Attribut (sonst triggert dieser nicht bei Aktualisierung des Readings)!}} &lt;br /&gt;
&lt;br /&gt;
tbd: &lt;br /&gt;
* Rain&lt;br /&gt;
* Wind&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
{{Hinweis|Positionen dürfen sich innerhalb eines Rollos nicht überschneiden - Auch ASC_Closed_Pos 100 ASC_Shading_Pos 98 ASC_ComfortOpen_Pos 97 usw... sind bereits unterschiedliche Positionen.}}&lt;br /&gt;
&lt;br /&gt;
===== Fahrzeiten =====&lt;br /&gt;
Zur Konfiguration der Fahrzeiten bietet es sich an, eine ReadingsGroup zu nutzen, wie unter [[#Hilfsmittel|Hilfsmittel]] dargestellt. Alternativ kann man die Zeiten auch manuell in den einzelnen Rollläden hinterlegen.&lt;br /&gt;
===== Bewohner =====&lt;br /&gt;
Wird ein Raum von einer oder mehreren bestimmten Person/en bewohnt oder gibt es ein Sammel-Gerät für mehrere Bewohner, kann dies mit den Attributen &#039;&#039;ASC_Roommate_Device&#039;&#039; und &#039;&#039;ASC_Roommate_Reading&#039;&#039; einem Rollladen zugeordnet werden. Ist einer der Bewohner &#039;&#039;asleep&#039;&#039;, wird morgens erst geöffnet, wenn auch der letzte Roommate nicht mehr &#039;&#039;asleep&#039;&#039; ist.&lt;br /&gt;
===== Fensterkontakte  =====&lt;br /&gt;
Dann werden ggf. vorhandene Fensterkontakte mit &#039;&#039;ASC_WindowRec&#039;&#039; zugeordnet und der Sensortyp mit &#039;&#039;ASC_WindowRec_subType&#039;&#039; festgelegt. Im Falle von threeState-Sensoren wird das übergreifende &#039;&#039;ASC_autoShuttersControlComfort&#039;&#039; beachtet, wobei dann bei vollständiger Öffnung des Fensters auf den in &#039;&#039;ASC_ComfortOpen_Pos&#039;&#039; festgelegten Wert gefahren wird.&lt;br /&gt;
===== Frostschutz =====&lt;br /&gt;
Zuletzt können die Attribute &#039;&#039;ASC_Antifreeze&#039;&#039; und &#039;&#039;ASC_Antifreeze_Pos&#039;&#039; festgelegt werden, wenn die Frostschutzfunktion aktiviert werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Beschattung ===&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
IM ASC DEVICE das Reading &amp;quot;controlShading&amp;quot; mit dem Wert on, sowie ein Astro/Twilight Device im Attribut &amp;quot;ASC_twilightDevice&amp;quot; und das Attribut &amp;quot;ASC_tempSensor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
Ihr benötigt einen Helligkeitssensor als Attribut &amp;quot;ASC_BrightnessSensor&amp;quot;, sofern noch nicht vorhanden. Findet der Sensor nur für die Beschattung Verwendung ist der Wert DEVICENAME[:READING] ausreichend.&lt;br /&gt;
Alle weiteren Attribute sind optional und wenn nicht gesetzt mit Default-Werten belegt. Ihr solltet sie dennoch einmal anschauen und entsprechend Euren Gegebenheiten setzen. Die Werte für die Fensterposition und den Vor- Nachlaufwinkel &#039;&#039;(ASC_Shading_InOutAzimuth)&#039;&#039; sowie die Grenzwerte für &amp;lt;code&amp;gt;&#039;&#039;ASC_shading_StateChange_SunnyCloudy&#039;&#039;&amp;lt;/code&amp;gt; solltet ihr besondere Beachtung dabei schenken. &lt;br /&gt;
&lt;br /&gt;
==== Bedingungen ====&lt;br /&gt;
Damit die Beschattung startet müssen &#039;&#039;&#039;alle&#039;&#039;&#039; Bedingungen erfüllt sein. Entschattet wird sobald &#039;&#039;&#039;einer&#039;&#039;&#039; der Bedingungen wegfällt und die Zeit aus &amp;lt;code&amp;gt;ASC_Shading_WaitingPeriod&amp;lt;/code&amp;gt; abgelaufen ist.&lt;br /&gt;
&lt;br /&gt;
Der Sonnensensor &amp;lt;ASC_BrightnessSensor&amp;gt; muss mindestens 2 Messwerte liefern, bevor das ASC-Modul in die Beschattungsposition fährt! Beim (zeitlich gesehen) ersten Messwert wird der Zustand &#039;&#039;in-reserved&#039;&#039; eingenommen und erst beim zweiten Messwert dann der Zustand &#039;&#039;in shading&#039;&#039; eingenommen. Die Anzahl der Messwerte ist abhängig vom &amp;quot;moving average window&amp;quot;, der mit dem dritten Parameter des Attributs &#039;&#039;ASC_Shading_StateChange_SunnyCloudy&#039;&#039; konfiguriert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Von Standardwerten ausgehend ist nachfolgender Ablauf angestrebt:&#039;&#039;&#039;   &lt;br /&gt;
# Ein Event vom Astro oder Helligkeits Device kommt -&amp;gt; sind alle Werte innerhalb des Arbeitsbereiches, ändert sich der ASC Info-Zustand im Rollo von xx auf „in reserved“ (Beschattung vorbereitet)&lt;br /&gt;
# Ein erneutes Event vom Astro oder Helligkeits Device kommt -&amp;gt; Überprüfung der Werte -&amp;gt; sind diese weiterhin gegeben folgt der Wechsel von „in reserved“ auf „in“ (Beschattung aktiv)&lt;br /&gt;
# Bei Verwendung von &#039;&#039;ASC_Shading_StateChange_SunnyCloudy&#039;&#039; ist zu beachten, dass ein Durchschnitt über die letzten drei Brightness Events gerechnet wird. Möchte man das vermeiden muss man SUNNY:CLOUDY 1[2] setzen. &lt;br /&gt;
# Die Zeiten &#039;&#039;ASC_Shading_WaitingPeriod&#039;&#039; und &#039;&#039;ASC_BlockingTime_afterManual&#039;&#039; können hier zusätzlich für eine Verzögerung sorgen. &lt;br /&gt;
&#039;&#039;&#039;Wichtig zu beachten:&#039;&#039;&#039; Es müssen immer mehrere (mind. 2) Events für den Betrieb erfolgen. In den Standardeinstellungen vom Astro Modul erfolgt dieses z.B. nur 1 x pro Stunde. Kommt also ein Helligkeits-Event auch nur 1x pro Stunde, könnte es 2 Std dauern, bis die Beschattungsfunltion greift. &lt;br /&gt;
&lt;br /&gt;
Wenn das Rollo einmal aus der Beschattung manuell (im Rollo Device muss bei &#039;&#039;ASC_ShuttersLastDrive manuel&#039;&#039; stehen gefahren wurde wird das Rollo erst wieder nach einer Entschattung und erneuter Beschattung gefahren. Also es muss einmal shading out kommen und beim nächsten shading in fährt er dann wieder.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Funktionen ===&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Beschreibung WeekendHoliday Funktion im Brightnessbetrieb.&#039;&#039;&#039; ====&lt;br /&gt;
Wenn Wochenende oder Feiertag ist und WeekendHoliday aktiviert wurde und im Rollo das Attribut ASC_Time_Up_WE_Holiday gesetzt ist dann wird ausschließlich zur angebenden ASC_Time_Up_WE_Holiday Zeit gefahren ungeachtet des Brightnesswertes.&lt;br /&gt;
&lt;br /&gt;
==== Privacy ====&lt;br /&gt;
Werden hierfür Werte festgelegt, werden die betreffenden Rollläden die festgelegte Zeit/Helligkeit vor dem abendlichen Schließen vorab teilweise geschlossen. Dies kann z.B. gewünscht sein, um Rollläden zur Straße hin mit viel Fußgängerverkehr zwar nicht vollständig abzudunkeln, aber gleichzeitig zu verhindern, dass von außen in Wohnräume geschaut werden kann, sobald dort das Licht angeschaltet wird&lt;br /&gt;
&lt;br /&gt;
==== BlockingTime====&lt;br /&gt;
Bewirkt, dass nach einer manuellen Fahrt, eine vom ASC Modul initiierte Fahrt zunächst ausgesetzt wird, bis die im Attribute angegebene Zeit überschritten ist. Erst dann wird eine vom ASC Modul initiierte Fahrt tatsächlich durchgeführt.&lt;br /&gt;
Genau so wird ein Hochfahren eines Rollos durch das ASC Modul nicht mehr ausgeführt, wenn es innerhalb der Zeit von ASC_BlockingTime_beforNightClose und das Runterfahren wird nicht mehr erfolgen, wenn es innerhalb von ASC_BlockingTime_beforDayOpen ist.&lt;br /&gt;
Beispiel: Meine Tochter geht früh außer Haus und Ihre Rollos sind nicht hochgefahren. Diese fahren auch nicht mehr hoch, da die ausschließlich bei home (anwesend) fahren sollen. Nun kommt sie am Nachmittag um 16:23 Uhr nach Hause. Eigentlich sollten nun die Rollos fahren. Doch die Sonnenuntergangsfahrt (schließen) wäre schon 16:51 Uhr und damit innerhalb der 3600 ASC_BlockingTime_beforNightClose. Die Rollos bleiben also unten. Es lohnt sich für die paar Minuten einfach nicht mehr.&lt;br /&gt;
&lt;br /&gt;
==== wiggle====&lt;br /&gt;
Mit einem &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; wiggle&amp;lt;/code&amp;gt; können alle Rollladen mit einem entsprechenden Attribut zu einer kurzen Fahrt veranlasst werden, nach Ablauf von einer Minute wieder um denselben Wert zurück. Dabei wird jeweils in die Richtung gefahren, die den weiteren Weg ermöglicht. Wenn also zu 70% geschlossen ist, wird der Rollladen hoch fahren.&lt;br /&gt;
==== Partymode ====&lt;br /&gt;
Dieser wird am ASC-Device selbst aktiviert mittels &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; partyMode on&amp;lt;/code&amp;gt;. Alle Rollladen-Devices, welche das Attribut &#039;&#039;ASC_Partymode&#039;&#039; auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, der durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, beim Beenden des Modus durch &amp;lt;code&amp;gt;set ASC-Device partyMode off&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
==== lock-out ====&lt;br /&gt;
Man kann mit dem Befehl &amp;lt;code&amp;gt; set &amp;lt;ASC-Device&amp;gt; hardLockOut&amp;lt;/code&amp;gt; auf einen Schlag alle Rollos sperren welche &amp;lt;code&amp;gt; attr &amp;lt;ROLLO-Device&amp;gt; ASC_LockOut hard&amp;lt;/code&amp;gt; gesetzt haben.&lt;br /&gt;
Das ist dafür gedacht, wenn Du eine gewisse Zeit den Rolloaktor sperren willst. Zum Beispiel das die Kinder nicht schalten sollen.&lt;br /&gt;
&lt;br /&gt;
== Sonstige Hinweise und Problemlösungen ==&lt;br /&gt;
* Werden Attribute geändert, kann es vereinzelt vorkommen, dass das ASC-Modul dies nicht mitbekommt und das tatsächliche Verhalten nicht den Erwartungen entspricht. In so einem Fall empfielt es sich, das NOTIFYDEV nochmals aufbauen zu lassen. Dazu werden zunächst mit &amp;lt;code&amp;gt;set &amp;lt;ASC-Modul&amp;gt; expert 1&amp;lt;/code&amp;gt; erweiterte Informationen bezüglich des NotifyDevs unter set und get aktiviert und anschließend ein &amp;lt;code&amp;gt;set &amp;lt;ASC-Modul&amp;gt; createNewNotifyDev&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
* Hin und wieder berichten Nutzer davon, wenn Sie die &#039;&#039;Privacy Funktion&#039;&#039; nutzen, dass sich im NOTIFYDEV anstelle des Device Namen ein Raumname befindet. Diese Problem kann damit gelöst werden, dass in dem betroffenen &#039;&#039;&#039;Rollo Device&#039;&#039;&#039; das Atribut  &amp;lt;code&amp;gt;attr event-on-change .*&amp;lt;/code&amp;gt; gesetzt wird.&lt;br /&gt;
&#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Nicht verwechseln mit dem ASC Device dort darf &amp;lt;code&amp;gt;attr event-on-change&amp;lt;/code&amp;gt; &#039;&#039;&#039;nicht&#039;&#039;&#039; gesetzt sein!&lt;br /&gt;
* Wenn mehrere Rollladen gleichzeitig den Fahrbefehl bekommen, kann es (z. B. bei zwave) dazu kommen, dass ein Rollladen seinen Befehl nicht bekommt. Dies kann durch eine zeitverzögerte Aussendung der Fahrbefehle vermieden werden. Dazu in den jeweiligen Rollo Devices das Attribut ASC_Drive_DelayStart wie folgt benutzen im: ersten Rollo Device braucht das Attribut nicht gesetzt werden, im zweiten Rollo Device im Attribut ASC_Drive_DelayStart dann 4 Sekunden eintragen, im dritten Rollo Device im Attribut ASC_Drive_DelayStart 8 Sekunden eintragen, usw. Ein Abstand von 3-4 Sekunden ist dabei zielführend.&lt;br /&gt;
&lt;br /&gt;
==== Spezielle Hardware ====&lt;br /&gt;
{{Link2Forum|Topic=101182|LinkText=&amp;quot;Thread zu getesteter Hardware im Forum&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=92628|LinkText=&amp;quot;Thread zum Modul im Forum&amp;quot;}}&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
* Daten zum Sonnenstand z.B. hier https://www.sonnenverlauf.de/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=34682</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=34682"/>
		<updated>2021-02-01T08:23:14Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Attribut pidDeltaTreshold beschrieben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState|||| processing |alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|pidDeltaTreshold&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|Minimaler Veränderukng der Aktorstellung in Prozent&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; bei MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Event-on-change-reading&amp;diff=34620</id>
		<title>Event-on-change-reading</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Event-on-change-reading&amp;diff=34620"/>
		<updated>2021-01-15T16:10:56Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Entfernung der nachfolgenden Leerzeichen in Listenaufzählungen des Attributes gem. dieser Diskussion: https://forum.fhem.de/index.php?topic=60557.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:event-on-change-reading}}  &amp;lt;!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Infobox Attribut sinnvoll? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut [[event-on-change-reading]] kann für Readings eines Gerätes festgelegt werden, dass nur bei einer Wertänderung ein Event (und damit in der Regel auch ein Log-Eintrag) erzeugt werden soll und nicht bei jedem turnusmäßigen Update des Gerätes.&lt;br /&gt;
&lt;br /&gt;
Wird &#039;&#039;event-on-change-reading&#039;&#039; für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
Grundsätzlich senden Geräte ihre Readings dann, wenn ein Ereignis zu einer Statusänderung führt, also z.b. ein Schalter betätig wird. Allerdings senden die meisten Geräte auch immer Zusatzinformationen, etwa den Batteriestatus, Zieltemperatur, Pairingstatus, PeerList etc.etc.; meist sogar in bestimmten Intervallen (Update) auch ohne das das Reading sich ändert. Einige Geräte wie z.b. Shelly Plugs sind sehr &amp;quot;gesprächig&amp;quot; und senden auch den Status des Tasters mit jedem Update, selbst wenn der Schaltzustand sich nicht ändert. &lt;br /&gt;
&lt;br /&gt;
Dies hat einige Nachteile:&lt;br /&gt;
* Aufblähen des Logfiles&lt;br /&gt;
* höhere Last der FHEM-Installation, da ein Event vom GeraetXXXX zunächst alle Notifys in FHEM benachrichtigt (d.h. notify, FileLog, sequence, watchdog, DOIF, etc), auch wenn diese mit dem Event nichts anfangen können.&lt;br /&gt;
* Konstrukte der Art &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;… notify GeraetXXXX:wert …&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; werden unter Umständen immer wieder im Update-Intervall ausgelöst, obwohl der Schaltzustand sich nicht geändert hat. (z.b. bei Shelly Plugs)&lt;br /&gt;
* EvenMonitor bzw. Telnet &#039;&#039;Info Timer&#039;&#039; mitunter unübersichtlich&lt;br /&gt;
&lt;br /&gt;
Mit event-on-change-reading lässen sich für Readings eines Gerätes festgelegt, dass nur bei einer Wertänderung ein Event erzeugt wird und nicht mit jedem Update. Dies adressiert alle oben genannten Nachteile.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann die Nutzung von &#039;&#039;event-on-change-reading&#039;&#039; auch selbst Probleme erzeugen:&lt;br /&gt;
*  Es muss überlegt werden, ob die eigene FHEM Installation an manchen Stellen in bestimmten Intervallen Meldungen benötigt, auch wenn die Werte sich nicht ändern. Dies sind typischerweise Graphen.&lt;br /&gt;
* Wird &#039;&#039;event-on-change-reading&#039;&#039; für ein einzelnes Reading gesetzt, erzeugen alle übrigen Readings des Gerätes keine Events mehr, &#039;&#039;&#039;auch nicht wenn Werte sich ändern&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um das Verhalten von event-on-change-reading zu modifizieren und diese Probleme zu lösen, stehen ausserdem die Attribute [[event-on-update-reading]] (Reading soll mit jedem Update gesendet werden, auch wenn es sich nicht geändert hat) und [[event-min-interval]] ((Reading soll mit Update gesendet werden, wenn seit der letzten Meldung ZeitspanneX vergangen ist) zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Das &#039;&#039;event-on-change-reading&#039;&#039; Attribut wird in der folgenden Weise spezifiziert:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading reading1[:threshold][,reading2[:threshold]...n]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Die zu berücksichtigenden Readings sind als durch Komma getrennte Werte anzugeben, können aber auch über reguläre Ausdrücke zusammengefasst werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere sinnvoll ist der reguläre Ausdruck .* , der alle Readings umfasst:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt;&amp;amp;lt;nowiki&amp;amp;gt;event-on-change-reading .*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
So formuliert führt das Attribut  dazu, dass alle Readings noch Events erzeugen, aber nur wenn diese sich im Wert ändern.&lt;br /&gt;
&lt;br /&gt;
Mit Threshold ist optional ein Wert angegebbar, um den das &amp;quot;neue&amp;quot; Reading größer oder kleiner sein soll als das vorherige, um ein Event auszulösen. So löst&lt;br /&gt;
:&amp;lt;code&amp;gt;attr event-on-change-reading temperature:0.4,humidity:2 &amp;lt;/code&amp;gt;&lt;br /&gt;
nur bei Änderungen der Temperatur um mindestens 0,4 Grad oder Änderung der Luftfeuchtigkeit von 2 % ein Event aus (und damit einen Eintrag ins Logfile). Threshold ist besonders sinnvoll bei sehr fein auflösenden Sensoren, um z.b. zu verhindern, das jede Temperaturschwankung um 0,1 Grad ein Event auslöst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wechselwirkungen == &lt;br /&gt;
Wie oben erwähnt steht das Attribut in Wechselwirkung mit den Attributen &#039;&#039;timestamp-on-change-reading&#039;&#039; [[event-on-update-reading]] und [[event-min-interval]], die das Verhalten modifizieren. Dies ist beim Einsatz zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Sind bei einem Device weder &#039;&#039;event-on-change-reading&#039;&#039; noch &#039;&#039;event-on-update-reading&#039;&#039; spezifiziert, werden für alle Readings sowohl bei Änderung als auch bei der Aktualisierung (Update mit dem gleichen Wert) Events erzeugt (Default Verhalten). Sobald jedoch eines der beiden Attribute gesetzt ist, müssen alle Readings, die protokolliert werden sollen bei (mindestens) einem der Attribute berücksichtigt sein.&lt;br /&gt;
&lt;br /&gt;
Ist für ein Reading sowohl &#039;&#039;event-on-change-reading&#039;&#039; als auch &#039;&#039;event-on-update-reading&#039;&#039; spezifiziert, wird bei jeder Aktualisierung des Readings ein Event erzeugt, das &#039;&#039;event-on-change&#039;&#039; wird für dieses Reading also außer Kraft gesetzt bzw. &amp;quot;überstimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== timestamp-on-change-reading ==&lt;br /&gt;
Ist nur event-on-change-reading für ein Reading spezifiziert, entfällt zunächst einmal nur der Trigger, der Zeitstempel wird weiter aktualisiert. Benötigt man jedoch den Zeitstempel der letzten Änderung (z.B. die Ein- oder Ausschaltzeit eines Relais), kann man mithilfe von &#039;&#039;timestamp-on-change-reading&#039;&#039; auch die Aktualisierung des Zeitstempels unterbinden, falls der Wert sich nicht geändert hat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiel == &lt;br /&gt;
In einer einfachen Anwendung kann, um alle Readings eines Gerätes nur bei Änderungen zu verarbeiten, das Attribut folgendermaßen gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading .*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Zusätzlich kann mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-min-interval .*:3600&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
dafür gesorgt werden, dass jede Stunde auch ohne Werteänderung die Readings dennoch verarbeitet werden, also in z.b. in das Logfile geschrieben werden (findet FHEM zu wenige Ereignisse pro betrachteter Zeitspanne, bleiben Graphen leer oder werden nur teilweise gezeichnet (Plotabriss)). &lt;br /&gt;
&lt;br /&gt;
Das obige Kombination der Attribute führt also dazu, dass ein Event wird erzeugt wird, wenn der neue Wert wirklich abweichend vom alten Wert ist &#039;&#039;&#039;oder&#039;&#039;&#039; mindestens &#039;&#039;min-interval&#039;&#039; Sekunden seit dem letzten Event vergangen sind.&lt;br /&gt;
&lt;br /&gt;
Achtung: dies löst wie oben beschrieben ggf. Konstrukte wie &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;… notify GeraetXXXX:wert …&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
Um ein Threshold für nur eine Reading zu setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; &amp;lt;device&amp;gt; event-on-change-reading Temp.*:0.4,.*&amp;lt;/code&amp;gt;&lt;br /&gt;
Alle Readings, die mit Temp beginnen, erzeugen nur ein Event, wenn die Änderung &amp;gt;0.4 Grad ist. Alle anderen Readings erzeugen bei jeder Änderung ein Event.&lt;br /&gt;
&lt;br /&gt;
Nur ein Reading mit Threshold berücksichtigen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; &amp;lt;device&amp;gt; event-on-change-reading Temp.*:0.4&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Alle Readings, die mit Temp beginnen, erzeugen nur ein Event, wenn die Änderung &amp;gt;0.4 Grad ist. Alle anderen Readings erzeugen keine Event, auch nicht bei Werteänderung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit [[event-on-update-reading]] und [[event-min-interval]] kann das Verhalten verfeinert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
*{{Link2Forum|Topic=26694|Message=196955|LinkText=Forenbeitrag}}&lt;br /&gt;
*[[event-on-update-reading]]&lt;br /&gt;
*[[event-min-interval]]&lt;br /&gt;
*[[event-aggregator]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Benutzungstipps (&#039;&#039;Best Practice&#039;&#039;) für das Attribut in {{Link2Forum|Topic=36522|LinkText=diesem Forenthread}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Attribut (allgemeingültig)]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=33517</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=33517"/>
		<updated>2020-07-18T06:10:57Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Anpassung Bezeichnung Attribut ASC_DriveDelay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux ({{Link2FU|13684|Forum}}/[[Benutzer Diskussion:CoolTux|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;absent&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
* Optional:&lt;br /&gt;
** Ein Helligkeitssensor (Steuerung nach Helligkeit und Beschattung)&lt;br /&gt;
** Ein Device zur Bestimmung des Sonnenstands (nur für Beschattung). Unterstützt werden derzeit [[Modul Astro|Astro]] und [[Twilight]]&amp;lt;ref&amp;gt;Dabei müssen ggf. in [[Global|global]] auch Angaben zu &#039;&#039;longitude&#039;&#039; und &#039;&#039;latitude&#039;&#039; vorhanden sein&amp;lt;/ref&amp;gt;. &lt;br /&gt;
** Wenn Feiertage berücksichtigt werden sollen: Ein oder mehrere {{Link2CmdRef|Anker=holiday2we|Lang=en|Label=holiday2we}}-Angaben in [[Global|global]] samt entsprechender [[Wochenende, Feiertage und Schulferien#Feiertage mittels holiday-Datei|holiday]]-Dateien&amp;lt;ref&amp;gt;Es kann auch z.B. ein Dummy-Device verwendet werden, dieses sollte dann aber neben dem eigentlichen Feiertags-&#039;&#039;state&#039;&#039; auch in einem Reading &#039;&#039;tomorrow&#039;&#039; Angaben zu anstehenden Feiertagen enthalten.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Bitte verfahren Sie entsprechend, wenn Urlaubs- oder Ferientage wie Feiertage behandelt werden sollen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
Dabei geht man am einfachsten schrittweise vor und erweitert die Funktionalität nach und nach um die gewünschten Funktionen. Dann benötigt man jeweils nur einen kleinen Teil der vielen per Attribut einstellbaren Optionen, und kann die Auswirkungen der jeweiligen Änderung besser nachvollziehen. &lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
{{Hinweis|ASC kann auch verwendet werden, um lediglich Teilaufgaben der Rollladensteuerung zu erfüllen, also z.B. nur das morgendliche Öffnen der Rollläden. Allerdings geht dabei ein erheblicher Teil des Komforts verloren, der dadurch entsteht, dass die Steuerung innerhalb der vollintegrierten Lösung jeweils nachvollzieht, aus welchem Grund eine Fahrt erfolgt war und dies ggf. bei der nächsten Aktion berücksichtigt.}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Zunächst sollten die in den [[#Basics|Basics]] beschriebenen Geräte vorhanden und funktionsfähig sein. &lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;ASC&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese Attribute können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;ASC&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.&lt;br /&gt;
&lt;br /&gt;
Aus dieser Vorgabe leitet das Modul dann jeweils bestimmte Voreinstellungen (&#039;&#039;defaults&#039;&#039;) für den Rolladen ab, ohne dass die betreffenden, dafür vorgesehenen Attribute ausdrücklich gesetzt werden müssen. Es genügt daher, nur jeweils die Einstellungen zu verändern, die anders gewünscht werden oder für den Rollladenaktortyp anders sein müssen (z.B. &#039;&#039;dim 99&#039;&#039; für vollständiges Öffnen eines ZWave-Aktors).&lt;br /&gt;
{{Hinweis|Das Vorstehende gilt jeweils für den nicht-invertierten Modus! Wer z.B. ein HomeMatic-Gerät mit &#039;&#039;levelinverse&#039;&#039; betreibt, sollte &#039;&#039;ASC&#039;&#039; auf &amp;quot;1&amp;quot; setzen usw.. Maßgeblich ist letztlich nur die Frage, ob die Offen-Positionsangabe nummerisch kleiner oder größer als die Geschlossen-Positionsangabe ist; die konkreten Zahlenwerte spielen dabei keine Rolle, die Angabe &#039;&#039;position&#039;&#039; oder &#039;&#039;pct&#039;&#039; kann auch später über ein weiteres Attribut passend eingestellt werden.}}&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im ASC-Device selbst ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR /&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || || Zeit wird abhängig von der eingestellten Attribute ASC_Time_Up/ASC_Time_Down angezeigt. Bei &#039;&#039;astro&#039;&#039; die Uhrzeit des  Sonnenauf- oder Sonnenuntergang, bei &#039;&#039;time&#039;&#039; und &#039;&#039;brightness&#039;&#039; die Zeit aus ASC_Time_Up_Early/ASC_Time_Down_Late pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || || Position pro Rollonamen bevor ASC die Rolläden verfahren hat&lt;br /&gt;
|-&lt;br /&gt;
|..._PosValue || ||aktuelle Position pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|ascEnable||on, off ||globale ASC Steuerung bei den Rollläden aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|controlShading||on, off ||globale Beschattungsfunktion aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|hardLockOut || on, off ||Status des hardwareseitigen Aussperrschutzes / gilt nur für Rolläden mit dem Attribut bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist&lt;br /&gt;
|-&lt;br /&gt;
|selfDefense || on, off ||globale Selbstschutzfunktion aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || globaler Partymodus aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des ASC-Devices: active, enabled, disabled oder weitere Statusinformationen wie z.B. Grund der letzen Fahrt&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden, welche in den jeweiligen Räumen gefunden wurden, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||globale Wochenendunterstützung aktiv oder inaktiv&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Das ASC-Modul verteilt an die gesteuerten Rollladen-Geräte diverse Benutzerattribute (userattr). In diesem Reading kann der Status dieser Verteilung geprüft werden.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings in den Rolllädendevices ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Enable ||Status von ASC_Enable (on,off)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersLastDrive ||Grund des letzten Fahrens des Rolladens&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveDown ||Zeit wird abhängig von der eingestellten Attribute ASC_Time_Down angezeigt. Bei astro die Uhrzeit des Sonnenuntergangs, bei time und brightness die Zeit aus /ASC_Time_Down_Late &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveUp ||Zeit wird abhängig von der eingestellten Attribute ASC_Time_Up angezeigt. Bei astro die Uhrzeit des Sonnenaufgangs, bei time und brightness die Zeit aus /ASC_Time_Up_Early&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==set- und get-Befehle für das ASC-Device==&lt;br /&gt;
&lt;br /&gt;
=== set-Anweisungen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR /&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|advDriveDown ||on, off ||holt bei allen Rollläden durch ASC_Adv on ausgesetzte Fahrten nach&lt;br /&gt;
|-&lt;br /&gt;
|ascEnable||on, off ||Aktiviert oder deaktiviert die globale ASC-Steuerung&lt;br /&gt;
|-&lt;br /&gt;
|controlShading||on, off ||Aktiviert oder deaktiviert die globale Beschattungssteuerung&lt;br /&gt;
|-&lt;br /&gt;
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an. (Diese Funktion steht nur zur Verfügung, wenn Attribut ASC_expert auf 1 gesetzt ist.)&lt;br /&gt;
|-&lt;br /&gt;
|hardLockOut ||on, off ||Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||Aktiviert den globalen Partymodus. Alle Rollladen-Geräten, in welchen das Attribut ASC_Partymode auf on gesetzt ist, werden durch ASC nicht mehr gesteuert. Der letzte Schaltbefehl, der bspw. durch ein Fensterevent oder Wechsel des Bewohnerstatus an die Rollläden gesendet wurde, wird beim Deaktivieren des Partymodus ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|renewAllTimer || ||erneuert bei allen Rollläden die Zeiten gemäß ASC_UP/ASC_DOWN und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|renewTimer || ||erneuert bei dem ausgewählten Rolladen die Zeiten gemäß ASC_UP/ASC_DOWN und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &#039;&#039;ASDC&#039;&#039; &#039;&#039;1&#039;&#039; oder &#039;&#039;2&#039;&#039; und legt diese im ASC-Modul an&lt;br /&gt;
|-&lt;br /&gt;
|selfDefence ||on, off||Aktiviert bzw. deaktiviert die Selbstschutzfunktion. Beispiel 1: Wenn das Residents-Gerät &#039;&#039;gone&#039;&#039; meldet, alle Rollläden dann heruntergefahren.  Beispiel 2 : Wenn das Residents-Gerät absent meldet, das Attribut ASC_ShuttersPlace=terrace ist und ein Fenster im Haus noch geöffnet ist, so wird an diesem Fenster der Rollladen  dann heruntergefahren.&lt;br /&gt;
|-&lt;br /&gt;
|shutterASCenableToggle ||  ||Aktivieren oder deaktivieren der ASC Kontrolle beim einzelnen Rollladens&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||Aktiviert die Wochenendunterstützung und somit, ob im Rollladen das Attribut ASC_Time_Up_WE_Holiday beachtet werden soll oder nicht.&lt;br /&gt;
|-&lt;br /&gt;
|wiggle ||||bewegt einen oder mehrere Rollläden um einen definierten Wert (Default: 5%) und nach einer Minute wieder zurück in die Ursprungsposition. Diese Funktion könnte bspw. zur Abschreckung in einem Alarmsystem eingesetzt werden.&lt;br /&gt;
|-&lt;br /&gt;
|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get-Anweisungen ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diese Funktion wird primär fürs Debugging genutzt. Hierzu ist das Attribut ASC_expert = 1 zu setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Hinweis|Die Attributnamen haben sich teilweise geändert, nachfolgend ist der Stand von Modulversion v0.8.x wiedergegeben.}}&lt;br /&gt;
{{Hinweis|In der commandref findet sich häufig die Schreibweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ASC_BrightnessSensor Sensorname[:brightness [400:800]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Dabei sind die Angaben in den eckigen Klammern optional. Dies müssen also nicht angegeben werden, stattdessen verwendet das Modul dann Standardwerte (siehe cref), die in der cref zu findenden Angaben entsprechen dabei den defaults. Werden Werte angegeben, sind die eckigen Klammern &#039;&#039;&#039;wegzulassen&#039;&#039;&#039;! Beispiel: &amp;lt;code&amp;gt;ASC_BrightnessSensor hm_motion_1 70:100&amp;lt;/code&amp;gt; würde das brightness-Reading des Sensors hm_motion_1 verwenden und einen morgendlichen Schwellenwert von 70 bzw. 100 für abends.}}&lt;br /&gt;
===Attribute direkt am ASC-Device ===&lt;br /&gt;
&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;
|ASC_autoAstroModeEvening || ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON ||nach welchem ASTRO-Modus soll die Abendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || - 9 bis 9 || 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeEvening der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning || ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || nach welchem ASTRO-Modus soll die Morgendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || - 9 bis 9|| 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeMorning der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlComfort ||on, off || off ||schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate-Sensor am Fenster beim Öffnen in eine Offenposition fährt. Hierzu muss beim Rollladen das Attribut ASC_ComfortOpen_Pos entsprechend konfiguriert sein. &lt;br /&gt;
|- &lt;br /&gt;
|ASC_autoShuttersControlEvening ||on, off || ||Aktiviert die automatische Steuerung durch das ASC-Modul am Abend.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlMorning ||on, off || ||Aktiviert die automatische Steuerung durch das ASC-Modul am Morgen.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_blockASCDrivesAfterManual ||0, 1 || ||wenn dieser Wert auf 1 gesetzt ist, dann werden Rollläden vom ASC-Modul nicht mehr gesteuert, wenn zuvor manuell eingegriffen wurde. Voraussetzung hierfür ist jedoch, dass im Reading ASC_ShuttersLastDrive der Status manual enthalten ist und sich der Rollladen auf eine unbekannte (nicht in den Attributen anderweitig konfigurierte) Position befindet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessDriveUpDown || || || Werte (z.B. Lux) bei dem Schaltbedingungen für Sonnenauf- und -untergang geprüft werden sollen. Diese globale Einstellung kann durch die WERT-MORGENS:WERT-ABENDS Einstellung von ASC_BrightnessSensor im Rollladen selbst überschrieben werden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_debug ||0, 1 || 0||Aktiviert die erweiterte Logausgabe für Debugausgaben (nur nach Aufforderung nutzen) &lt;br /&gt;
|-&lt;br /&gt;
|ASC_expert ||0, 1 ||0 ||ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter &#039;&#039;set und get&#039;&#039; angezeigt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_freezeTemp ||-5 bis 5 || ||Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensor || || ||DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS] - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der &amp;quot;wegen Regen geschlossen Position&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDev  || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Devicenamen und Readingnamen des Residents-Device der obersten Ebene (z.B. rgr_Residents:state)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_shuttersDriveDelay  || || ||maximale Zufallsverzögerung in Sekunden bei der Berechnung der Fahrzeiten. 0 bedeutet keine Verzögerung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_tempSensor || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_twilightDevice || || ||das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_windSensor || || ||DEVICE[:READING] - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&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;
|ASC || 0, 1, 2|| ||&amp;quot;kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles&amp;quot;,1 = &amp;quot;Inverse oder Rollo - Bsp.: Rollo oben 0, Rollo unten 100 und der Befehl zum prozentualen Fahren ist position&amp;quot;,2 = &amp;quot;Homematic Style - Bsp.: Rollo oben 100, Rollo unten 0 und der Befehl zum prozentualen Fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Adv || on, off||||bei on wird das runterfahren des Rollos während der Weihnachtszeit (1. Advent bis 6. Januar) ausgesetzt! Durch set &amp;lt;ASCDEVICE&amp;gt; advDriveDown werden alle ausgesetzten Fahrten nachgeholt.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze ||off, soft, hard, am, pm || ||Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos, bei hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze_Pos || || ||Position des Rolllades die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist  !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || ||nach welchem ASTRO-Modus soll die Abendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || - 9 bis 9 || 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeEvening der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON || || nach welchem ASTRO-Modus soll die Morgendfahrt berechnet werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || - 9 bis 9|| 0|| Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeMorning der Wert HORIZON ausgewählt wurde.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_afterManual || ||1200 ||wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforeDayOpen || ||3600 ||wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforeNightClose || ||3600 ||ie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessSensor || ||none ||DEVICE[:READING] WERT-MORGENS:WERT-ABENDS / &#039;Sensorname[:brightness [400:800]]&#039; Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Closed_Pos || ||default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;||in 10er-Schritten von 0 bis 100 &lt;br /&gt;
wird angefahren wenn SelfDefense aktiv ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ComfortOpen_Pos || || || in 10er Schritten von 0 bis 100 !!! Die eingestellte Position wird bei einem threestate Sensor angefahren. Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Down || time, astro, brightness, roommate || astro||bei &#039;&#039;astro&#039;&#039; wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_DiveUpMaxDuration || || 60||die Dauer des Hochfahrens des Rollladens plus 5 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_Delay || || -1|| maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet keine Verzögerung, -1 bedeutet, dass das gleichwertige Attribut aus dem ASC Device ausgewertet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_DriveDelayStart || || -1|| in Sekunden verzögerter Wert ab welchen dann erst das Offset startet und dazu addiert wird. Funktioniert nur wenn gleichzeitig ASC_DriveDelay gesetzt wird.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ExternalTrigger || |||| DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE, Beispiel: &amp;quot;WohnzimmerTV:state on:off 66:100&amp;quot; bedeutet das wenn ein &amp;quot;state:on&amp;quot; Event kommt soll das Rollo in Position 66 fahren, kommt ein &amp;quot;state:off&amp;quot; Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_GuestRoom || on, off |||| aktuell noch nicht umgesetzt...&lt;br /&gt;
|-&lt;br /&gt;
|ASC_LockOut || soft, hard, off ||off || stellt entsprechend den Aussperrschutz ein. Bei global aktivem Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rollladen oben. Dies gilt nur bei Steuerbefehlen über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich&lt;br /&gt;
|-&lt;br /&gt;
|ASC_LockOut_Cmd || inhibit, blocked, protection ||none|| set Befehl für das Rollladen-Device zum Hardware sperren. Dieser Befehl wird gesetzt werden, wenn man &amp;quot;ASC_LockOut&amp;quot; auf hard setzt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Down ||absent, always, off, home || always ||Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Up ||absent, always, off, home || always ||Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Open_Pos || ||default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;||in 10er-Schritten von 0 bis 100&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Partymode || on, off || off ||schaltet den Partymodus an oder aus. Wird am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und später erst ausgeführ&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent angibt. Wird bei unbekannten Device-Typen auch als &#039;&#039;set&#039;&#039; Befehl zum Fahren verwendet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDownValue_beforNightClose || || -1||wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDown_Pos || ||50||Position den Rollladens für den abendlichen Sichtschutz!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyUpValue_beforDay || || -1||wie viele Sekunden vor dem morgendlichen öffnen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:600 bedeutet 30 min vor day open oder bei über einem Brightnesswert von 600&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyUp_Pos || ||50||Position den Rollladens für den morgendlichen Sichtschutz!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_RainProtection ||on, off || ||soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Device || || none ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Rollladen-Raumes wiedergibt. Macht nur Sinn in Schlaf- oder Kinderzimmern&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Reading || || ||Reading des Roommate-Device, welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_AbsentDelay || || 300||um wie viele Sekunden soll das fahren in Selfdefense bei Residents absent verzögert werden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_Mode || || gone||ab welchen Residents Status soll Selfdefense aktiv werden ohne das Fenster auf sind&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_InOutAzimuth || ||95:265 ||Azimut Wert ab dem bei Überschreiten Beschattet und bei Unterschreiten Endschattet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_MinMax_Elevation || ||25.0:100.0 ||ab welcher min Höhe des Sonnenstandes soll beschattet und ab welcher max Höhe wieder beendet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_MinOutsideTemperature_ || ||18 ||ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwert&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShadingMode ||absent, always, off, home || off||wann soll die Beschattung nur stattfinden&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Pos || || ||Position des Rollladens für die Beschattung !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_StateChange_SunnyCloudy || ||35000:20000 ||Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_WaitingPeriod || ||1200 ||wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shutter_IdleDetection || ||||READING:VALUE gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo nicht fährt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist und das Residents-Device in den Status &#039;&#039;absent&#039;&#039; geht, &#039;&#039;selfDefence&#039;&#039; aktiv ist und das Fenster geöffnet ist, wird das Rollo  geschlossen. Wenn ein twostate Senso genutzt wird und dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist wird ASC_Ventilate_Pos ignoriert und das Rollo wird beim öffnen des Fenster komplett geöffnet. Wenn dieses Attribut auf &#039;&#039;window&#039;&#039; gesetzt ist wird ASC_Ventilate_Pos berücksichtigt und das Rollo wird entsprechend der ASC_Ventilate_Pos geöffnet. Wenn das Fenster wieder geschlossen wird, dann wird das Rollo unabhängig von &#039;&#039;windows oder terrace&#039;&#039; vollständig geschlossen.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Sleep_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC.&#039;&#039; Position wird angefahren wenn Bedingung für modeDown aktiv ist. Hiermit kann z.B. das komplette abendliche Schließen des Rollos begrenzt werden.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_TempSensor || || ||DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Early || ||16:00 ||Sonnenuntergang frühste Zeit zum Runterfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Late || ||22:00 ||Sonnenuntergang späteste Zeit zum Runterfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Early || || 05:00||Sonnenaufgang frühste Zeit zum Hochfahren !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Late || ||08:30 ||Sonnenaufgang späteste Zeit zum Hochfahren  !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_WE_Holiday || ||08:00 ||Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet).ACHTUNG!!! in Verbindung mit Brightness für ASC_Up muss die Uhrzeit kleiner sein wie die Uhrzeit aus ASC_Time_Up_Late !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!! &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Window_Open ||on, off ||on||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WiggleValue || ||5 ||Wert, um welchen sich die Position des Rollladens bei &#039;&#039;Wiggle&#039;&#039; ändern soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindParameters || ||5 ||TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: &#039;50:20 ClosedPosition&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindProtection ||on, off || ||soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec || ||none ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist. Reading ist optional&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_PosAfterDayClosed ||open, lastManual ||open ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. Sein Reading &#039;&#039;state&#039;&#039; muss die Werte &#039;&#039;open&#039;&#039;, &#039;&#039;closed&#039;&#039; oder &#039;&#039;tilted&#039;&#039; enthalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_subType ||twostate, threestate ||twostate||Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)&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;
| || || ||        &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
{{Hinweis|Die Device-Namen sind auf die eigene Installation anzupassen.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Codezeilen sind im [[Import von Code Snippets|RAW]]-Format.}}&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText= Stand 2019-05-03&lt;br /&gt;
* Erfolgreich getestet mit Homematic Devices, Beta-User&lt;br /&gt;
* Die Farbgebung entspricht dem Standard, wenn unter dem Style f18 der Farbpreset &#039;&#039;light&#039;&#039; gewählt wird.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Level ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Schliessen bis&amp;gt;,&amp;lt;Öffnen auf&amp;gt;,&amp;lt;Beschattung&amp;gt;,&amp;lt;Komfort&amp;gt;,&amp;lt;Lüften&amp;gt;,&amp;lt;Privacy&amp;gt; (Rollladen_.*|Jalousie_.*)..:level,!?ASC_Closed_Pos,!?ASC_Open_Pos,!?ASC_Shading_Pos,!?ASC_ComfortOpen_Pos,!?ASC_Ventilate_Pos,!?ASC_PrivacyDown_Pos&lt;br /&gt;
attr rg_ASC_Rolllaeden_Level commands {level =&amp;gt; &#039;pct:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:selectnumbers,0,5,100,0,lin&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Zeiten ===&lt;br /&gt;
[[Bild:ReadingsGroup ASC times.png|thumb|right|ReadingsGroup - Zeitenbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Up_WE/Hol&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; \&lt;br /&gt;
 (.*Rollo.*|.*Rollladen|Jalousie_.*):level,!?ASC_Time_Up_Early,!?ASC_Time_Up_Late,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;, \&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:55,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,  \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt; &#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;, \&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039; }&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC RG Zeiten HM ZWave Siro.png|thumb|right|ReadingsGroup - CUL_HM+ZWave+Siro mit widgets]]Neue Version mit time-Widgets und pct/dim/position-widget (5-er Schritte), passend für CUL_HM, ZWave und Siro-Geräte:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;defmod rg_ASC_Rolllaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early  &amp;gt;,&amp;lt;Time_Up_WE  &amp;gt;,&amp;lt;Time_Up_Late  &amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rollo_.*|Jalousie_.*)..:(level|dim|position),!?ASC_Time_Up_Early,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Up_Late,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times commands {level =&amp;gt; &#039;pct:selectnumbers,0,5,100,0,lin&#039;, \&lt;br /&gt;
dim =&amp;gt; &#039;dim:selectnumbers,0,5,99,0,lin&#039;,\&lt;br /&gt;
position =&amp;gt; &#039;pct:selectnumbers,0,5,99,0,lin&#039;,\&lt;br /&gt;
ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:time&#039;, \&lt;br /&gt;
ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:time&#039;,\&lt;br /&gt;
ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:time&#039;, \&lt;br /&gt;
ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:time&#039;,\&lt;br /&gt;
ASC_Time_Up_WE_Holiday =&amp;gt;&#039;ASC_Time_Up_WE_Holiday:time&#039;}&lt;br /&gt;
attr rg_ASC_Rolllaeden_Times room Rollladen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für die Beschattung ===&lt;br /&gt;
[[Bild:ReadingsGroup ASC shading.png|thumb|right|ReadingsGroup - Beschattungsbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;&lt;br /&gt;
defmod rg_ASC_Rolllaeden_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Richtung&amp;gt;,&amp;lt;°links&amp;gt;,&amp;lt;°rechts&amp;gt;,&amp;lt;Elevation&amp;gt;,&amp;lt;Sunny&amp;gt;,&amp;lt;Cloudy&amp;gt;,&amp;lt;Min Temp&amp;gt; (Rollo|Jalousie)_.*..:!?ASC_Shading_Mode,!?ASC_Shading_Pos,!?ASC_Shading_Direction,!?ASC_Shading_Angle_Left,!?ASC_Shading_Angle_Right,!?ASC_Shading_MinMax_Elevation,!?ASC_Shading_StateChange_Sunny,!?ASC_Shading_StateChange_Cloudy,!?ASC_Shading_Min_OutsideTemperature&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading alias Rollläden: Beschattung&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading commands {ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:knob,min:0,max:100,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:always,home,absent,off&#039;,\&lt;br /&gt;
ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:knob,min:0,max:360,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,cursor:true,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:knob,min:0,max:85,angleArc:85,rotation:anticlockwise,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:knob,min:0,max:85,angleArc:85,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,&#039;,\&lt;br /&gt;
ASC_Shading_MinMax_Elevation =&amp;gt; &#039;ASC_Shading_MinMax_Elevation:knob,min:0,max:35,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,lineCap:round,angleArc:120,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Sunny =&amp;gt; &#039;ASC_Shading_StateChange_Sunny:knob,min:100,max:40000,angleArc:85,rotation:anticlockwise,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:20,lineCap:round,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Cloudy =&amp;gt; &#039;ASC_Shading_StateChange_Cloudy:knob,min:100,max:40000,angleArc:85,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:20,lineCap:round,&#039;,\&lt;br /&gt;
ASC_Shading_Min_OutsideTemperature =&amp;gt; &#039;ASC_Shading_Min_OutsideTemperature:knob,min:5,max:30,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:0.5,lineCap:round,angleArc:120,angleOffset:270&#039;}&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Anderes {{Link2Forum|Topic=99980|Message=946357|LinkText=Foren-Beispiel}} für eine RG zu Beschattung (für V. 0.6.x):&lt;br /&gt;
[[Bild:ReadingsGroup ASC shading2.png|thumb|right|ReadingsGroup - Beschattungsbeispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-wrap: break-word;&amp;quot;&amp;gt;&lt;br /&gt;
defmod rg_ASC_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Grad&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Links&amp;gt;,&amp;lt;Rechts&amp;gt;,&amp;lt;Wait&amp;gt;,&amp;lt;ShadeIn&amp;gt;,&amp;lt;ShadeOut&amp;gt;,&amp;lt;Elevation&amp;gt;,&amp;lt;Temperature&amp;gt;,&amp;lt;Device&amp;gt;\&lt;br /&gt;
(Rollo_.*|Jalousie.*):!?ASC_Shading_Direction,!?ASC_Shading_Pos,!?ASC_Shading_Mode,!?ASC_Shading_Angle_Left,!?ASC_Shading_Angle_Right,!?ASC_Shading_WaitingPeriod,!?ASC_Shading_StateChange_Sunny,!?ASC_Shading_StateChange_Cloudy,!?ASC_Shading_MinMax_Elevation,!?ASC_Shading_Min_OutsideTemperature,!?ASC_BrightnessSensor\&lt;br /&gt;
&lt;br /&gt;
attr rg_ASC_Shading commands {ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:129,255,309&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:absent,always,off,home&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_WaitingPeriod =&amp;gt; &#039;ASC_Shading_WaitingPeriod:selectnumbers,0,60,1200,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Sunny =&amp;gt; &#039;ASC_Shading_StateChange_Sunny:selectnumbers,0,20,1000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Cloudy =&amp;gt; &#039;ASC_Shading_StateChange_Cloudy:selectnumbers,0,20,1000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_MinMax_Elevation =&amp;gt;\&lt;br /&gt;
&#039;ASC_Shading_Min_Elevation:selectnumbers,0,1,40,0,lin&#039; ,\&lt;br /&gt;
ASC_Shading_Min_OutsideTemperature =&amp;gt;\&lt;br /&gt;
&#039;ASC_Shading_Min_OutsideTemperature:selectnumbers,0,1,30,0,lin&#039;}&lt;br /&gt;
attr rg_ASC_Shading room Rollladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für FIBARO Roller Shutter FGR-222 Devices ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Getestet von majestro84, Stand 2019-01-28.&lt;br /&gt;
* https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099&lt;br /&gt;
* Die Farbgebung entspricht dem Standard, wenn unter dem Style f18 der Farbpreset &#039;&#039;dark&#039;&#039; gewählt wird}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC Jalousien Times.JPG|thumb|right|Beispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-break: break-all;word-wrap: break-word;&amp;quot;&amp;gt;define ASC_Jalousien_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt;,&amp;lt;PartyMode&amp;gt;,&amp;lt;LockOut&amp;gt; (.*_Jalousie.*):position,!?ASC_Time_Up_Early,!?ASC_Time_Up_WE_Holiday,!?ASC_Time_Up_Late,!?ASC_Time_Down_Early,!?ASC_Time_Down_Late,!?ASC_Mode_Down,!?ASC_Mode_Up,!?ASC_Partymode,!?ASC_LockOut&lt;br /&gt;
&lt;br /&gt;
 attr ASC_Jalousien_Times commands {position =&amp;gt; &#039;dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,&lt;br /&gt;
 ASC_Partymode =&amp;gt; &#039;ASC_Partymode:on,off&#039;,&lt;br /&gt;
 ASC_LockOut =&amp;gt; &#039;ASC_LockOut:soft,hard,off&#039;,&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, &lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
 attr ASC_Jalousien_Times room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bild:ASC Jalousien Level.JPG|thumb|right|Beispiel]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:65%;word-break: break-all;word-wrap: break-word;&amp;quot;&amp;gt; define Jalousien_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Comfort_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt;,&amp;lt;PrivacyDown_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt; (.*_Jalousie.*):!?ASC_Closed_Pos,!?ASC_Open_Pos,!?ASC_ComfortOpen_Pos,!?ASC_Ventilate_Pos,!?ASC_PrivacyDown_Pos,!?ASC_Shading_Pos&lt;br /&gt;
 attr Jalousien_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;}&lt;br /&gt;
 attr Jalousien_Level room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichtungsbeispiel ==&lt;br /&gt;
=== Zielsetzung und Vorgaben ===&lt;br /&gt;
Es sollen alle Rollläden und Jalousien in einem Haus innerhalb bestimmter zeitlicher Grenzen Morgens und Abends sonnenstandsabhängig gefahren werden, an den Wochenenden und an Ferientagen soll etwas später geöffnet werden. Es sind Tür- und Fensterkontakte vorhanden (Türkontakte: twoState, Fensterkontakte: threeState), wobei bei jeder Öffnung ein eventuell geschlossener Rollladen geöffnet werden soll. Bei allen Rollladenaktoren, Tür- und Fensterkontakten handelt es sich um CUL_HM-Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Vorarbeiten ===&lt;br /&gt;
Im global-Device sind Angaben zu latitude und longitude vorhanden, holiday2we wie folgt&amp;lt;ref&amp;gt;&#039;&#039;ferien&#039;&#039; ist eine automatisiert erstellte holiday-Datei nach diesem {{Link2Forum|Topic=85759|Message=885883|LinkText=Foren-Beitrag}}.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr global holiday2we bw,ferien&lt;br /&gt;
Weitere Angaben benötigen wir zunächst nicht, die Festlegung eines Astro-Devices erfolgt hier erst im Rahmen der Beschattung. &lt;br /&gt;
Dann erfolgt das &#039;&#039;Define des ASC-Devices&#039;&#039; wie oben beschrieben:&lt;br /&gt;
&amp;lt;code&amp;gt;define Rollladenautomatik AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Folgen die einzubindenden Rollladenaktoren einem einheitlichen Namensschema, können diese sodann z.B. mit &lt;br /&gt;
 attr (Jalousie|Rollladen)_.* ASC 2&lt;br /&gt;
auf einen Rutsch mit dem passenden ASC-Typ gekennzeichnet werden. Dann verteilen wir mir &lt;br /&gt;
 set Rollladenautomatik scanForShutters&lt;br /&gt;
die nachfolgend weiter zu bearbeitenden Attribute.&lt;br /&gt;
=== Schließen morgens und abends ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Alternative: Fahren nach brightness:&lt;br /&gt;
Will man insgesamt oder nur an einzelnen Rollläden stattdessen helligkeitsgesteuert fahren, muß für jeden Rollladen ein Helligkeitssensor definiert und entweder zentral oder am einzelnen Rollladen jeweils ein Höchst- bzw. Mindestwert festgelegt werden (&#039;&#039;ASC_BrightnessSensor&#039;&#039; etc.), bei dessen Überschreitung geöffnet bzw. Unterschreitung geschlossen werden soll.}}&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
Da wir sonnenstandsabhängig Fahrzeiten wollen, legen wir erst einmal fest, dass dies morgens und abends berücksichtigt werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeEvening CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeMorning CIVIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aus der Angabe &#039;&#039;CIVIL&#039;&#039; und den Vorgaben in den einzelnen Rollladen wird dabei mit Hilfe von [[SUNRISE_EL]] die effektive Fahrzeit berechnet, dort finden sich auch weitere Hinweise, zu den meisten anderen Optionen für die ersten beiden Attribute.&lt;br /&gt;
Bei allen Fensteröffnungen soll auf eine Lüften-Position gefahren werden, also schalten wir diese Funktion ebenfalls zentral an&amp;lt;ref&amp;gt;Sonst wird bei threeState-Sensoren nur bei &#039;&#039;tilted&#039;&#039; auf die in &#039;&#039;ASC_Ventilate_Pos&#039;&#039; gefahren.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr Rollladenautomatik ASC_autoShuttersControlComfort on &lt;br /&gt;
Zuletzt legen wir noch einen Temperatur-Sensor fest. Dieser wird beim Frostschutz sowie bei der Beschattung berücksichtigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_tempSensor Aussentemperatur_Nord:temperature&lt;br /&gt;
attr Rollladenautomatik ASC_freezeTemp 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tbd: &lt;br /&gt;
* Rain&lt;br /&gt;
* Wind&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
===== Fahrzeiten =====&lt;br /&gt;
Zur Konfiguration der Fahrzeiten bietet es sich an, eine ReadingsGroup zu nutzen, wie unter [[#Hilfsmittel|Hilfsmittel]] dargestellt. Alternativ kann man die Zeiten auch manuell in den einzelnen Rollläden hinterlegen.&lt;br /&gt;
===== Bewohner =====&lt;br /&gt;
Wird ein Raum von einer oder mehreren bestimmten Person/en bewohnt oder gibt es ein Sammel-Gerät für mehrere Bewohner, kann dies mit den Attributen &#039;&#039;ASC_Roommate_Device&#039;&#039; und &#039;&#039;ASC_Roommate_Reading&#039;&#039; einem Rollladen zugeordnet werden. Ist einer der Bewohner &#039;&#039;asleep&#039;&#039;, wird morgens erst geöffnet, wenn auch der letzte Roommate nicht mehr &#039;&#039;asleep&#039;&#039; ist.&lt;br /&gt;
===== Fensterkontakte  =====&lt;br /&gt;
Dann werden ggf. vorhandene Fensterkontakte mit &#039;&#039;ASC_WindowRec&#039;&#039; zugeordnet und der Sensortyp mit &#039;&#039;ASC_WindowRec_subType&#039;&#039; festgelegt. Im Falle von threeState-Sensoren wird das übergreifende &#039;&#039;ASC_autoShuttersControlComfort&#039;&#039; beachtet, wobei dann bei vollständiger Öffnung des Fensters auf den in &#039;&#039;ASC_ComfortOpen_Pos&#039;&#039; festgelegten Wert gefahren wird.&lt;br /&gt;
===== Frostschutz =====&lt;br /&gt;
Zuletzt können die Attribute &#039;&#039;ASC_Antifreeze&#039;&#039; und &#039;&#039;ASC_Antifreeze_Pos&#039;&#039; festgelegt werden, wenn die Frostschutzfunktion aktiviert werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Beschattung ===&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
IM ASC DEVICE das Reading &amp;quot;controlShading&amp;quot; mit dem Wert on, sowie ein Astro/Twilight Device im Attribut &amp;quot;ASC_twilightDevice&amp;quot; und das Attribut &amp;quot;ASC_tempSensor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
Ihr benötigt einen Helligkeitssensor als Attribut &amp;quot;ASC_BrightnessSensor&amp;quot;, sofern noch nicht vorhanden. Findet der Sensor nur für die Beschattung Verwendung ist der Wert DEVICENAME[:READING] ausreichend.&lt;br /&gt;
Alle weiteren Attribute sind optional und wenn nicht gesetzt mit Default-Werten belegt. Ihr solltet sie dennoch einmal anschauen und entsprechend Euren Gegebenheiten setzen. Die Werte für die Fensterposition und den Vor- Nachlaufwinkel &#039;&#039;(ASC_Shading_InOutAzimuth)&#039;&#039; sowie die Grenzwerte für &amp;lt;code&amp;gt;&#039;&#039;ASC_shading_StateChange_SunnyCloudy&#039;&#039;&amp;lt;/code&amp;gt; solltet ihr besondere Beachtung dabei schenken. &lt;br /&gt;
&lt;br /&gt;
==== Bedingungen ====&lt;br /&gt;
Damit die Beschattung startet müssen &#039;&#039;&#039;alle&#039;&#039;&#039; Bedingungen erfüllt sein. Entschattet wird sobald &#039;&#039;&#039;einer&#039;&#039;&#039; der Bedingungen wegfällt und die Zeit aus &amp;lt;code&amp;gt;ASC_Shading_WaitingPeriod&amp;lt;/code&amp;gt; abgelaufen ist.&lt;br /&gt;
&lt;br /&gt;
Der Sonnensensor &amp;lt;ASC_BrightnessSensor&amp;gt; muss mindestens 2 Messwerte liefern, bevor das ASC-Modul in die Beschattungsposition fährt! Beim (zeitlich gesehen) ersten Messwert wird der Zustand &#039;&#039;in-reserved&#039;&#039; eingenommen und erst beim zweiten Messwert dann der Zustand &#039;&#039;in shading&#039;&#039; eingenommen. Die Anzahl der Messwerte ist abhängig vom &amp;quot;moving average window&amp;quot;, der mit dem dritten Parameter des Attributs &#039;&#039;ASC_Shading_StateChange_SunnyCloudy&#039;&#039; konfiguriert wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Von Standardwerten ausgehend ist nachfolgender Ablauf angestrebt:&#039;&#039;&#039;   &lt;br /&gt;
# Ein Event vom Astro oder Helligkeits Device kommt -&amp;gt; sind alle Werte innerhalb des Arbeitsbereiches, ändert sich der ASC Info-Zustand im Rollo von xx auf „in reserved“ (Beschattung vorbereitet)&lt;br /&gt;
# Ein erneutes Event vom Astro oder Helligkeits Device kommt -&amp;gt; Überprüfung der Werte -&amp;gt; sind diese weiterhin gegeben folgt der Wechsel von „in reserved“ auf „in“ (Beschattung aktiv)&lt;br /&gt;
# Bei Verwendung von &#039;&#039;ASC_Shading_StateChange_SunnyCloudy&#039;&#039; ist zu beachten, dass ein Durchschnitt über die letzten drei Brightness Events gerechnet wird. Möchte man das vermeiden muss man SUNNY:CLOUDY 1[2] setzen. &lt;br /&gt;
# Die Zeiten &#039;&#039;ASC_Shading_WaitingPeriod&#039;&#039; und &#039;&#039;ASC_BlockingTime_afterManual&#039;&#039; können hier zusätzlich für eine Verzögerung sorgen. &lt;br /&gt;
&#039;&#039;&#039;Wichtig zu beachten:&#039;&#039;&#039; Es müssen immer mehrere (mind. 2) Events für den Betrieb erfolgen. In den Standardeinstellungen vom Astro Modul erfolgt dieses z.B. nur 1 x pro Stunde. Kommt also ein Helligkeits-Event auch nur 1x pro Stunde, könnte es 2 Std dauern, bis die Beschattungsfunltion greift. &lt;br /&gt;
&lt;br /&gt;
Wenn das Rollo einmal aus der Beschattung manuell (im Rollo Device muss bei &#039;&#039;ASC_ShuttersLastDrive manuel&#039;&#039; stehen gefahren wurde wird das Rollo erst wieder nach einer Entschattung und erneuter Beschattung gefahren. Also es muss einmal shading out kommen und beim nächsten shading in fährt er dann wieder.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Funktionen ===&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Beschreibung WeekendHoliday Funktion im Brightnessbetrieb.&#039;&#039;&#039; ====&lt;br /&gt;
Wenn Wochenende oder Feiertag ist und WeekendHoliday aktiviert wurde und im Rollo das Attribut ASC_Time_Up_WE_Holiday gesetzt ist dann wird ausschließlich zur angebenden ASC_Time_Up_WE_Holiday Zeit gefahren ungeachtet des Brightnesswertes.&lt;br /&gt;
&lt;br /&gt;
==== Privacy ====&lt;br /&gt;
Werden hierfür Werte festgelegt, werden die betreffenden Rollläden die festgelegte Zeit/Helligkeit vor dem abendlichen Schließen vorab teilweise geschlossen. Dies kann z.B. gewünscht sein, um Rollläden zur Straße hin mit viel Fußgängerverkehr zwar nicht vollständig abzudunkeln, aber gleichzeitig zu verhindern, dass von außen in Wohnräume geschaut werden kann, sobald dort das Licht angeschaltet wird&lt;br /&gt;
&lt;br /&gt;
==== BlockingTime====&lt;br /&gt;
Bewirkt, dass nach einer manuellen Fahrt, eine vom ASC Modul initiierte Fahrt zunächst ausgesetzt wird, bis die im Attribute angegebene Zeit überschritten ist. Erst dann wird eine vom ASC Modul initiierte Fahrt tatsächlich durchgeführt.&lt;br /&gt;
Genau so wird ein Hochfahren eines Rollos durch das ASC Modul nicht mehr ausgeführt, wenn es innerhalb der Zeit von ASC_BlockingTime_beforNightClose und das Runterfahren wird nicht mehr erfolgen, wenn es innerhalb von ASC_BlockingTime_beforDayOpen ist.&lt;br /&gt;
Beispiel: Meine Tochter geht früh außer Haus und Ihre Rollos sind nicht hochgefahren. Diese fahren auch nicht mehr hoch, da die ausschließlich bei home (anwesend) fahren sollen. Nun kommt sie am Nachmittag um 16:23 Uhr nach Hause. Eigentlich sollten nun die Rollos fahren. Doch die Sonnenuntergangsfahrt (schließen) wäre schon 16:51 Uhr und damit innerhalb der 3600 ASC_BlockingTime_beforNightClose. Die Rollos bleiben also unten. Es lohnt sich für die paar Minuten einfach nicht mehr.&lt;br /&gt;
&lt;br /&gt;
==== wiggle====&lt;br /&gt;
Mit einem &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; wiggle&amp;lt;/code&amp;gt; können alle Rollladen mit einem entsprechenden Attribut zu einer kurzen Fahrt veranlasst werden, nach Ablauf von einer Minute wieder um denselben Wert zurück. Dabei wird jeweils in die Richtung gefahren, die den weiteren Weg ermöglicht. Wenn also zu 70% geschlossen ist, wird der Rollladen hoch fahren.&lt;br /&gt;
==== Partymode ====&lt;br /&gt;
Dieser wird am ASC-Device selbst aktiviert mittels &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; partyMode on&amp;lt;/code&amp;gt;. Alle Rollladen-Devices, welche das Attribut &#039;&#039;ASC_Partymode&#039;&#039; auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, der durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, beim Beenden des Modus durch &amp;lt;code&amp;gt;set ASC-Device partyMode off&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
==== lock-out ====&lt;br /&gt;
Man kann mit dem Befehl &amp;lt;code&amp;gt; set &amp;lt;ASC-Device&amp;gt; hardLockOut&amp;lt;/code&amp;gt; auf einen Schlag alle Rollos sperren welche &amp;lt;code&amp;gt; attr &amp;lt;ROLLO-Device&amp;gt; ASC_LockOut hard&amp;lt;/code&amp;gt; gesetzt haben.&lt;br /&gt;
Das ist dafür gedacht, wenn Du eine gewisse Zeit den Rolloaktor sperren willst. Zum Beispiel das die Kinder nicht schalten sollen.&lt;br /&gt;
&lt;br /&gt;
== Sonstige Hinweise und Problemlösungen ==&lt;br /&gt;
* Werden Attribute geändert, kann es vereinzelt vorkommen, dass das ASC-Modul dies nicht mitbekommt und das tatsächliche Verhalten nicht den Erwartungen entspricht. In so einem Fall empfielt es sich, das NOTIFYDEV nochmals aufbauen zu lassen. Dazu werden zunächst mit &amp;lt;code&amp;gt;set &amp;lt;ASC-Modul&amp;gt; expert 1&amp;lt;/code&amp;gt; erweiterte Informationen bezüglich des NotifyDevs unter set und get aktiviert und anschließend ein &amp;lt;code&amp;gt;set &amp;lt;ASC-Modul&amp;gt; createNewNotifyDev&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
* Hin und wieder berichten Nutzer davon, wenn Sie die &#039;&#039;Privacy Funktion&#039;&#039; nutzen, dass sich im NOTIFYDEV anstelle des Device Namen ein Raumname befindet. Diese Problem kann damit gelöst werden, dass in dem betroffenen &#039;&#039;&#039;Rollo Device&#039;&#039;&#039; das Atribut  &amp;lt;code&amp;gt;attr event-on-change .*&amp;lt;/code&amp;gt; gesetzt wird.&lt;br /&gt;
&#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Nicht verwechseln mit dem ASC Device dort darf &amp;lt;code&amp;gt;attr event-on-change&amp;lt;/code&amp;gt; &#039;&#039;&#039;nicht&#039;&#039;&#039; gesetzt sein!&lt;br /&gt;
&lt;br /&gt;
==== Spezielle Hardware ====&lt;br /&gt;
{{Link2Forum|Topic=101182|LinkText=&amp;quot;Thread zu getesteter Hardware im Forum&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=92628|LinkText=&amp;quot;Thread zum Modul im Forum&amp;quot;}}&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30229</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30229"/>
		<updated>2019-04-22T18:20:30Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: redigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=Universal-Sensor.png&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt eingebaut im Türrahmen (EM-USE-00)&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;4µA (beim Senden:25mA)&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean EiMSIG Universalsensor&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (Riegelschaltkontakt oder entsprechendes Schließblech; per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30227</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30227"/>
		<updated>2019-04-22T09:26:49Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Foto eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=Universal-Sensor.png&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt eingebaut im Türrahmen (EM-USE-00)&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;4µA (beim Senden:25mA)&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean EiMSIG Universalsensor&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Universal-Sensor.png&amp;diff=30226</id>
		<title>Datei:Universal-Sensor.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Universal-Sensor.png&amp;diff=30226"/>
		<updated>2019-04-22T09:20:12Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Unsiversal-Sensor eingebaut im Türrahmen. Das Kabel führt zum Taster für den Schlossriegel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Unsiversal-Sensor eingebaut im Türrahmen. Das Kabel führt zum Taster für den Schlossriegel&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30225</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30225"/>
		<updated>2019-04-22T09:15:46Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=[[Datei:Universal-Sensor.png|mini|Sensor im Türrahmen]]&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt (EM-USE-00)&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;4µA (beim Senden:25mA)&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean EiMSIG Universalsensor&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30224</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30224"/>
		<updated>2019-04-22T09:11:45Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt (EM-USE-00)&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;4µA (beim Senden:25mA)&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean EiMSIG Universalsensor&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Vorlage:EnOceanSubTypeTable&amp;diff=30223</id>
		<title>Vorlage:EnOceanSubTypeTable</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Vorlage:EnOceanSubTypeTable&amp;diff=30223"/>
		<updated>2019-04-22T08:01:44Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: doorContact mit Beispiel hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
{{News|&#039;&#039;&#039;subType&#039;&#039;&#039;        |&#039;&#039;&#039;Wiki-Seite&#039;&#039;&#039;}}&lt;br /&gt;
{{News|tempSensor.XX  | }}&lt;br /&gt;
{{News|roomSensorControl.01 | }}&lt;br /&gt;
{{News|tempHumiSensor.02 |[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]] }}&lt;br /&gt;
{{News|lightSensor.XX |[[EnOcean-FAH60-Au%C3%9Fen-Helligkeitssensor]] }}&lt;br /&gt;
{{News|occupSensor.XX | }}&lt;br /&gt;
{{News|lightTempOccupSensor.XX |[[EnOcean-FBH65S-Funk-Bewegungs- Helligkeitssensor]] }}&lt;br /&gt;
{{News||[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]] }}&lt;br /&gt;
{{News|COSensor.01 | }}&lt;br /&gt;
{{News|tempHumiCO2Sensor.XX | }}&lt;br /&gt;
{{News|vocSensor.01 | }}&lt;br /&gt;
{{News|radonSensor.01 | }}&lt;br /&gt;
{{News|particlesSensor.01 | }}&lt;br /&gt;
{{News|roomSensorControl.XX  | }}&lt;br /&gt;
{{News|tempCtrlState.01 | }}&lt;br /&gt;
{{News|shutterCtrlState.01 |[[EnOcean-D-452-FU-EBIM-JR-Aktor-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News|blindsCtrl.00 |[[EnOcean-UPJ230_12-Jalousieaktor]]}}&lt;br /&gt;
{{News|lightCtrlState.XX |[[EnOcean-D-452-FU-EBIM-Aktor-2fach]] }}&lt;br /&gt;
{{News|autoMeterReading.XX |[[EnOcean-FSR61VA-10A-Stromstoß-Schaltrelais mit Strommessung]] }}&lt;br /&gt;
{{News|environmentApp |[[EnOcean-FWS61-24V-DC-Funk-Wetterdaten-Sendemodul]] }}&lt;br /&gt;
{{News|multiFuncSensor | }}&lt;br /&gt;
{{News|hvac.XX |[[EnOcean-MD15-Kleinstellantrieb]] }}&lt;br /&gt;
{{News||[[Micropelt iRTV Kleinstellantrieb]] }}&lt;br /&gt;
{{News|digitalInput.XX | }}&lt;br /&gt;
{{News|gateway; gwCmd switching|[[EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais]] }}&lt;br /&gt;
{{News|gateway; gwCmd dimming|[[EnOcean-FUD12NPN-RS485-Bus-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor-unidirektional]] }}&lt;br /&gt;
{{News||{{Link2Forum|Topic=58832|LinkText=Osram Touch Dim RC}} }}&lt;br /&gt;
{{News|gateway; gwCmd blindCmd|[[EnOcean-D-452-FU-EBIM-JR-Aktor-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News||[[EnOcean-D-452-FU-EBI-JR-Aktor-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News|manufProfile |[[EnOcean-FSB12-RS485-Bus-Schaltaktor-2-Kanal-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News||[[EnOcean-FSB14-RS485-Bus-Schaltaktor-2-Kanal-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News||[[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News|actuator.01 |[[EnOcean-D-452-FU-EBIM-Aktor-2fach]] }}&lt;br /&gt;
{{News||[[EnOcean-PSC234-Zwischenstecker]] }}&lt;br /&gt;
{{News|switch.XX |[[EnOcean-PTM-210-Taster]] }}&lt;br /&gt;
{{News||[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]]}}&lt;br /&gt;
{{News||[[EnOcean-FSR12-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais]]}}&lt;br /&gt;
{{News||[[EnOcean-FMS61NP-2-Kanal-Multifunktions-Stromstoßschalter]]}}&lt;br /&gt;
{{News||[[EnOcean-FSR61VA-10A-Stromstoß-Schaltrelais mit Strommessung]]}}&lt;br /&gt;
{{News||[[EnOcean-SecuSignal-Fenstergriff]]}}&lt;br /&gt;
{{News|roomCtrlPanel.00 | }}&lt;br /&gt;
{{News|contact |[[EnOcean_Starter_Guide#Kontakte]] }}&lt;br /&gt;
{{News||[[EnOcean-STM-250-Fenster-Türkontakt]]}}&lt;br /&gt;
{{News|keycard.xx | }}&lt;br /&gt;
{{News|windowHandle.XX |[[EnOcean-SecuSignal-Fenstergriff]]}}&lt;br /&gt;
{{News|sensor | }}&lt;br /&gt;
{{News|smokeDetector.02 |[[EnOcean-FRW-Rauchmelder]]}}&lt;br /&gt;
{{News|PM101|[[EnOcean_Starter_Guide#Profilloses_4BS-Teach-In]] }}&lt;br /&gt;
{{News|raw | }}&lt;br /&gt;
{{News|doorContact|[[EiMSIG Universalsensor mit EnOcean]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Die Endung .XX bei einem subType bedeutet, dass es mehrere subType-Untervarianten gibt, die sich aber nur in Kleinigkeiten -zumeist Skalierung- unterscheiden.&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30222</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30222"/>
		<updated>2019-04-22T07:58:51Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Wiki-Überschrift angeglichen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;20µA (beim Senden:25mA&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean EiMSIG Universalsensor&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30221</id>
		<title>EiMSIG Universalsensor mit EnOcean</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EiMSIG_Universalsensor_mit_EnOcean&amp;diff=30221"/>
		<updated>2019-04-22T07:56:22Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Inititale Fassung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=&lt;br /&gt;
|Bildbeschreibung=2-Kanal-Tür-Kontakt&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-14-01 bzw. A5-14-07&lt;br /&gt;
|HWChannels=2 &lt;br /&gt;
|HWVoltage=3V&lt;br /&gt;
|HWPowerConsumption=&amp;lt;20µA (beim Senden:25mA&lt;br /&gt;
|HWPoweredBy=2* CR 2032&lt;br /&gt;
|HWSize= 135 x 26 x 9 [mm] (Breite × Höhe × Tiefe), Gewicht 34 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EiMSIG GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EiMSIG Universalsensor mit EnOcean&#039;&#039;&#039; ist ein batteriebetriebener schlanker Tür-(Fenster-)Kontakt mit 2 Kanälen&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Universal-Sensor passt meist in den Luftraum zwischen Tür- und Türrahmen und erkennt per Reed-Kontakt sowie einen Schalter das Öffnen der Tür und den ordnungsgemäßen Verschluss (Schlossriegel vollständig in der Falle).&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand meldet sich der Sensor mit EEP A5-14-01 und wird als subType Multisensor angelegt. In diesem Fall wird nur der Reed-Kontakt erkannt (Kanal A des Gerätes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Mit dem von www.fenstersensor.com herunterladbaren PC-Tool  EiMSIG Konfigurator (setzt ein USB-Enocean-Gateway wie TCM 300 voraus) kann sehr leicht auf das EEP A5-14-07 umgestellt werden. FHEM erkennt das Gerät dann als subType doorContact und kennt den Kanal A für den Reedkontakt und Kanal B für den Kontakt in der Schlossfalle (per Kabel an dem Device angeschlossen).&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Gerätes löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am Sensor zwischen 5 und &amp;lt;10 Sekunden drücken. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
#Alternativ: Taster am Sensor zwischen 2 und &amp;lt;5 Sekunden drücken, damit wird die AES-Verschlüsselung eingeschaltet. Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|block||unlocked||locked/unlocked||Ist der Kontakt B geschlossen oder offen (z.B. ein Schalter in der Schlossfalle)&lt;br /&gt;
|-&lt;br /&gt;
|contact||open||open/closed||Ist der Kontakt A (Reed-Kontakt) geschlossen oder offen&lt;br /&gt;
|-&lt;br /&gt;
|state||C: open B: unlocked V: off U: 3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|teach||each-in accepted EEP A5-14-07 Manufacturer: EiMSIG, EFP GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|vibration||off||||wird von dem Sensor nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|voltage||3.10||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:NeedsEditing]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=29178</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=29178"/>
		<updated>2019-01-20T17:49:37Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Modell MVA-005 wird von FHEM direkt unterstützt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das seit 21.1.2019 von FHEM unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht (MVA-005:bedingt) geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren bzw. bei MVA-004 und MVA-005 im internen PID-Betrieb auf 21° gesteuert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-004; beim MVA-005 A5-20-06&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||bei MVA-002 bis MVA-004: hvac.01; bei MVA-005: hvac.06&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired-temp 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=29052</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=29052"/>
		<updated>2019-01-13T07:50:17Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Modellvarianten aufgeführt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
Das Modell MVA-004 ist rund und hat einen eigenen PID-Controller, das Modell MVA-005 (ebenfalls rund) hat zusätzlich eine Handverstellung in Ein-Grad-Schritten (bis +/- 5°). Beide Modelle sind noch leiser und sollen laut Hersteller bei schwacher Funkversorgung die Verbindung besser halten. Das Modell MVA-005 hat das EEP A5-20-06, das aktuell noch nicht von FHEM unterstützt wird. Mit EEP A5-20-01 ist ein Basisbetrieb möglich.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||MVA-002 bis MVA-005: dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Eintragen, wenn ein Device, die Solltemperatur vorgibt, z.B. Heating_Control oder ein physischer Raumthermostat, der in FHEM ausgelesen wird.&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28928</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28928"/>
		<updated>2019-01-03T07:14:09Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrekturen in den set-Befehlen setpointTemp und setpointSet; Einführung Modell MVA-004 und MVA-005&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung. Hier wird vorrangig das Modell MVA-002 beschrieben. &lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet, wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst wenn das attr pidCtrl on ist&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidCtrl||on||||bei on wird der FHEM Pid-Controler benutzt, bei off der im Actor (Modell MVA-002 hat keinen internen PID-Controler, wohl aber MVA-004 und MVA-005)&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28826</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28826"/>
		<updated>2018-12-29T12:03:54Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Weitere Erkenntnisse bei Energie-Readings dokumentiert, Ergänzungen bei Attributen, Präzisierungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok ||&#039;&#039;&#039;ok&#039;&#039;&#039; / low||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||enabled||&#039;&#039;&#039;enabled&#039;&#039;&#039; / disabled||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||&#039;&#039;&#039;charged&#039;&#039;&#039; / empty ||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&#039;&#039;&#039;Betrieb mit Stellwert-Vorgabe&#039;&#039;&#039; / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|pidSensorTimeout||3600|||| Zahl der Sekunden, in denen der Sensor auf einen Wert vom temperatureRefDev auf einen Wert wartet, sonst Alarm&lt;br /&gt;
|-&lt;br /&gt;
|rcvRespAction||||||Hier kann eine Aktion eingetragen werden, die bei Rückmeldung des Aktors durchgeführt wird. Details in der FHEM-Referenz&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointSummerMode||2||||Ventilöffnung, die im Sommer gelten soll&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28821</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28821"/>
		<updated>2018-12-28T14:01:17Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / im Sommer-Modus / mit Temperatursollwert-Vorgabe &lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch Module wie Heating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT=setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit|||noch nicht gesendetes Kommando, hier Kalibrierungslauf|&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240|||das Gerät meldet sich alle 4 Minuten|&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 5 Minuten einen Temperaturwert sendet (gegebenenfalls mit attr event-min-interval im sendenden Temperatur-Device einstellen). Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28684</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=28684"/>
		<updated>2018-12-16T07:12:51Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time [s]&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 6 Stunden einen Temperaturwert sendet. Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=25472</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=25472"/>
		<updated>2018-02-24T08:35:44Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: ereklärung actuarstate obstructed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||wenn &#039;obstructed&#039;, dann ist der metallene Kühlring des Gehäuses z.b. von einem Vorhang bedeckt und der Thermogenerator kann nicht richtig arbeiten&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 6 Stunden einen Temperaturwert sendet. Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24695</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24695"/>
		<updated>2018-01-25T07:12:18Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des FHEM-Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||dies eintragen, wenn beim Teach-in ein anderer Wert eingetragen wurde&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 6 Stunden einen Temperaturwert sendet. Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24661</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24661"/>
		<updated>2018-01-23T14:03:14Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Schreibfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 6 Stunden einen Temperaturwert sendet. Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desired 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24660</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=24660"/>
		<updated>2018-01-23T14:02:09Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Neue Rubrik Tipps und Tricks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt FHEM den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von FHEM. Darum zeigen FHEM-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an FHEM über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
Fehlermeldungen wie Sensor dead oder no Response from actuator kann man im Betrieb mit einem externen Sensor verhindern, in dem man mindestens alle 6 Stunden einen Temperaturwert sendet. Alternativ kann man auch über ein DOIF alle 24 Stunden den Wunschwert mit &amp;lt;Code&amp;gt;set &amp;lt;Devicename&amp;gt; desried 20&amp;lt;/Code&amp;gt; wiederholen, wobei 20 beispielhaft eine Wunschtemperatur ist.&lt;br /&gt;
&lt;br /&gt;
Für eine stabile Funkkommunikation ist ein RSSI von besser als -80 anzustreben. Eine Verbesserungsmöglichkeit bietet das versuchsweise Drehen des Micropelt am Heizkörper um 90°. Normalerweise ist der geprägte Schriftzug Micropelt waagerecht wie auch die innen liegende Antenne. Nach der Drehung steht diese dann aufrecht. Das passt in der Praxis dann manchmal besser zu einer waagerecht angeordneten Senderantenne, deren Leistung sich dann gezielter im Haus verbreitet. Ein RSSI von -70 ist besser als -80.&lt;br /&gt;
Die Empfangsqualität aller EnOcean-Geräte lässt sich schnell mit &amp;lt;Code&amp;gt;list .* TCM_ESP3_0_RSSI&amp;lt;/Code&amp;gt; abfragen, wobei TCM_ESP3_0 der Name des EnOcean-Gateways ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=34314|Message=290203|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ReadingsChange&amp;diff=24327</id>
		<title>ReadingsChange</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ReadingsChange&amp;diff=24327"/>
		<updated>2018-01-05T08:45:26Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Initiale Fassung: Anlass Problematik mit event-on-*-Atrributen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:readingsChange}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Formatieren von Readings&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=readingsChange&lt;br /&gt;
|ModTechName=33_readingsChange.pm&lt;br /&gt;
|ModForumArea=Automatisierung}} &lt;br /&gt;
&lt;br /&gt;
Eventuell ist es nötig, die Readings eines Gerätes zu formatieren, Ihnen also Nachkommastellen abzuschneiden oder Textinhalte zu entfernen, hinzufügen oder umzustellen.&lt;br /&gt;
&lt;br /&gt;
Hierzu dient das FHEM-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[readingsChangey]]. Sobald ein Reading vom Device erzeugt wird, dass dem RegEX des Moduls entspricht, wird die Formatierung, z.B. von 27.2852 zu 27.3 vorgenommen.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
&lt;br /&gt;
Die Definition ist bestens vom Modulautor in der Referenz beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten ==&lt;br /&gt;
ReadingsChange ist abhängig von der Reihenfolge der Events und deren interner Verarbeitung. In dieser &amp;quot;Nahrungskette&amp;quot; steht es ziemlich weit hinten, mit dem Ergebnis, dass zum Beispiel Devices mit Attributen wie event-on-Change-reading fallweise nicht formatiert werden.&lt;br /&gt;
Dies erklärt dieser und sein folgender Forumseintrag: {{Link2Forum|Topic=65055|LinkText=readingsChange funktioniert nicht mehr}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier spielt eine wichtige Rolle die Notify-Order, die man mit list .* NTFY_ORDER sich vor Augen führen kann.&lt;br /&gt;
== Links ==&lt;br /&gt;
* Forenthema zur {{Link2Forum|Topic=60226|LinkText=Vorstellung des Moduls}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=22065</id>
		<title>DbLog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=22065"/>
		<updated>2017-08-05T07:46:39Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Entfernung einer fehlerhaften Ergänzung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Protokolliert Ereignisse in einer Datenbank&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=93_DbLog.pm&lt;br /&gt;
|ModOwner=tobiasfaust ({{Link2FU|118|Forum}}/[[Benutzer Diskussion:Tobias.faust|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Mit der Zeit entstehen im fhem recht umfangreiche Log-Daten für die verschiedensten konfigurierten Devices. Die übliche Einstiegs-[[Konfiguration]] sieht vor, dass die Logs als [http://fhem.de/commandref_DE.html#FileLog FileLog] gespeichert werden - je nach Einstellung in wenigen sehr großen oder vielen kleineren Dateien. Der Datei-basierte Zugriff ist allerdings nicht wirklick performant und kann schnell zum Flaschenhals werden (z.B. bei der Darstellung von Graphen über einen längeren Zeitraum).&lt;br /&gt;
&lt;br /&gt;
Alternativ kann Fhem die Log-Daten mittels [http://fhem.de/commandref_DE.html#DbLog DbLog] in einer Datenbank speichern. Diese kann lokal als einfache SQLite- oder als zentrale Server-Datenbank (s.u.) gestaltet sein. Schon eine lokale einfache SQLite-Datenbank ist in der Regel deutlich performanter als File-basierte Logs.&lt;br /&gt;
&lt;br /&gt;
Damit eine Datenbank-Nutzung möglich ist, müssen folgende Anpassungen gemacht werden:&lt;br /&gt;
# [[#Datenbank|Erstellen einer entsprechenden Datenbank]]&lt;br /&gt;
# [[#Datenbank-Anbindung mittels db.conf|Konfiguration der Datenbank-Anbindung in FHEM]]&lt;br /&gt;
# [[#Konfiguration als Device in fhem.cfg|Anpassen aller (oder einzelner) Konfigurationen von FileLog nach DbLog]]&lt;br /&gt;
# [[#Anpassen der gplot-Konfigurationen|Ggf. Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Datenbank-Anbindung mittels db.conf ===&lt;br /&gt;
DbLog wird durch 2 verschiedene Einträge aktiviert/definiert. In einer Datei namens &#039;&#039;&#039;db.conf&#039;&#039;&#039; werden die Parameter für eine Verbindung zur Datenbank (host, username, password, etc.) hinterlegt. Diese Datei kann in einem beliebigen Verzeichnis angelegt werden. Für eine MySQL-Datenbank sieht die db.conf folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
 %dbconfig= (&lt;br /&gt;
     connection =&amp;gt; &amp;quot;mysql:database=fhem;host=db;port=3306&amp;quot;,&lt;br /&gt;
     user =&amp;gt; &amp;quot;fhemuser&amp;quot;,&lt;br /&gt;
     password =&amp;gt; &amp;quot;fhempassword&amp;quot;,&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation befindet sich eine Beispielkonfiguration mit der Syntax für jeden unterstützen Datenbanktyp.&lt;br /&gt;
Es wird empfohlen diese Datei zu kopieren und erst dann entsprechend zu bearbeiten. Am Besten kopiert man diese Datei in das FHEM Home Directory /opt/fhem/ und achtet auf die entsprechenden Rechte!&lt;br /&gt;
 chown fhem:dialout /opt/fhem/db.conf&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration als Device ===&lt;br /&gt;
Das DbLog Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; DbLog &amp;lt;configfilename&amp;gt; &amp;lt;regexp&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;&amp;lt;configfilename&amp;gt;&#039;&#039; dem Pfad zur zuvor angelegten db.conf entspricht.&lt;br /&gt;
Ein Beispiel hierfür wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;&lt;br /&gt;
Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit vielen teils irrelevanten Werten gefüllt wird. Man kann daher die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Dies ist in [[#Finetuning des Loggings]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
Bei der Konfiguration des Log-Devices werden die zu loggenden Daten definiert - in der einfachsten Form sieht das so aus: &amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;. Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit sehr vielen und teils nicht benötigten Werten gefüllt wird und schnell wächst. Die Datenbank ist zwar deutlich leistungsfähiger, was große Datenmengen angeht, Datensparsamkeit kann aber schnell sinnvoll werden...&lt;br /&gt;
&lt;br /&gt;
Um das Log-Aufkommen einzugrenzen gibt es 2 Ansätze:&lt;br /&gt;
* Einschränkung über den &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag&lt;br /&gt;
* Einschränkung über DbLogExclude-Einträge der jeweiligen Devices&lt;br /&gt;
* Einschränkung über DbLogInclude-Einträge des jeweiligen Devices&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über den zentralen &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag ====&lt;br /&gt;
Man kann die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Die erste Wildcard, also das erste &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;, entspricht dem in FHEM verwendeten Device-Namen. Die zweite Wildcard entspricht dem vom Device ausgegebenen zu loggenden Wert. Separiert werden beiden Angaben durch einen Doppelpunkt. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel, um zwar alle definierten Devices zu erfassen, aber nur die Werte Temperatur, Ventilposition und Luftfeuchte in die Datenbank zu schreiben wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define myDbLog DbLog ./db.conf .*:(temperature|valveposition|humidity).* &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Man kann die zu loggenden Werte für einzelne Devices separat einschränken, ohne dies im zentralen define-Eintrag machen zu müssen. Dies kann interessant sein, wenn beispielsweise ein Device Fehlerwerte meldet, die uninteressant sind, oder es meldet unnötig häufig Werte - beides ist z.B. bei 1-wire-Temperatursensoren gerne der Fall.&lt;br /&gt;
&lt;br /&gt;
Um das einzuschränken gibt es 2 Stellparameter, die als Attribute direkt zum jeweiligen Device konfiguriert werden:&lt;br /&gt;
* DbLogExclude - definiert Werte, die nicht geloggt werden sollen&lt;br /&gt;
* DbLogInclude - definiert Werte, die geloggt werden sollen ( siehe attr DbLogSelectionMode )&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. [http://fhem.de/commandref_DE.html#event-on-update-reading commandref])&lt;br /&gt;
&lt;br /&gt;
Eine konkrete Konfiguration für einen sehr gesprächigen 1-wire-Temperatursensor könnte wie folgt aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define EG_Balkon GPIO4 BUSMASTER&lt;br /&gt;
attr EG_Balkon DbLogExclude failures,T,85     # logge keine &amp;quot;failures&amp;quot;, &amp;quot;T&amp;quot;-Werte und &amp;quot;85&amp;quot;-Werte (default-Werte, wenn keine Temperatur gelesen werden kann)&lt;br /&gt;
attr EG_Balkon event-on-change-reading state  # logge nur, wenn sich ein Wert ändert (wenn sich die Temperatur nicht ändert, logge das nicht)&lt;br /&gt;
attr EG_Balkon event-min-interval state:900   # logge spätestens alle 900sec = 15min&lt;br /&gt;
attr EG_Balkon event-on-update-reading .*     # logge alle Werte, die aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;1-Wire-Device vom Typ OWTHERM oder OWSWITCH&amp;gt; DbLogExclude data.*      # verhindert das Logging der state-Eintragungen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine in diesem {{Link2Forum|Topic=33697|Message=264127}} vorgestellte Strategie zur Vermeidung unnötigen Loggings ist, dass bei der Definition von Devices durch das nachfolgende &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; automatisch ein DbLogExclude für alle Werte (.*) des Devices zugewiesen wird und dies nur bei Interesse an geloggten Werten gelöscht bzw. angepasst wird:&lt;br /&gt;
&amp;lt;code&amp;gt;define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso ist es mittlerweile möglich, lediglich erwünschte Werte (Positiv-Liste) zu loggen und alle anderen zu verwerfen. Hierfür wird im LogDevice das attribut DbLogSelectionMode Include verwendet. Nun kann für jedes Device mit DbLogInclude &amp;lt;Reading1&amp;gt;,&amp;lt;Reading2&amp;gt;,... angegeben werden, welche Readings geloggt werden sollen. &lt;br /&gt;
Integriert ist ebenfalls ein &amp;quot;min-interval&amp;quot;, siehe commandref.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme (Auswahl):&lt;br /&gt;
* Sqlite&lt;br /&gt;
* MySQL&lt;br /&gt;
* PostGreSql&lt;br /&gt;
&lt;br /&gt;
=== Tabellen ===&lt;br /&gt;
Die Datenbank ist relativ simpel gestaltet und besteht lediglich aus den folgenden beiden Tabellen:&lt;br /&gt;
* current&lt;br /&gt;
* history&lt;br /&gt;
&lt;br /&gt;
DbLog ist auf eine feste Tabellenstruktur angewiesen. Man muss daher in seiner Datenbank eine Tabelle mit folgenden Spalten anlegen:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Spalte&lt;br /&gt;
! Beschreibung (en)&lt;br /&gt;
! Beschreibung (de)&lt;br /&gt;
! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TIMESTAMP&#039;&#039;&#039;&lt;br /&gt;
| timestamp of event&lt;br /&gt;
| Zeitstempel&lt;br /&gt;
| 2007-12-30 21:45:22 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DEVICE&#039;&#039;&#039;&lt;br /&gt;
| device name&lt;br /&gt;
| Device-Name&lt;br /&gt;
| Wetterstation&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TYPE&#039;&#039;&#039;&lt;br /&gt;
| device type&lt;br /&gt;
| Device-Typ&lt;br /&gt;
| KS300&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;EVENT&#039;&#039;&#039;&lt;br /&gt;
| event specification as full string&lt;br /&gt;
| Eventspezifikation als Text&lt;br /&gt;
| humidity: 71 (%)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;READING&#039;&#039;&#039;&lt;br /&gt;
| name of reading extracted from event&lt;br /&gt;
| Bezeichnung des Readings&lt;br /&gt;
| humidity&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VALUE&#039;&#039;&#039;&lt;br /&gt;
| actual reading extracted from event&lt;br /&gt;
| Wert des Readings&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UNIT&#039;&#039;&#039;&lt;br /&gt;
| unit extracted from event&lt;br /&gt;
| Einheit des Readings&lt;br /&gt;
| %&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Vorlagen zur Anlage von Tabellen und Indizes sind für jeden unterstützten Datenbanktyp im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation, oder hier zu finden: [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/dblog/ Link]. Das MySQL-Skript (db_create_mysql.sql) legt eine neue Datenbank, das PostGres-Skript (db_create_postgresql.sql) ein neues Schema mit Namen &amp;quot;fhem&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
==== current ====&lt;br /&gt;
Die Tabelle current enthält für jedes zu loggende Device lediglich den letzten Wert. Falls noch kein Wert geloggt wurde, ist diese Tabelle leer. &lt;br /&gt;
Falls der Inhalt gelöscht wird, bauen sich die Daten automatisch wieder auf. Es gehen durch das löschen der Tabelle current keine Log-Informationen verloren.&lt;br /&gt;
Der Inhalt wird aber u.a. für die Dropdown-Felder beim Plot-Editor verwendet.&lt;br /&gt;
&lt;br /&gt;
Um doppelte Einträge in der Tabelle zu vermeiden, wurden die Möglichkeit geschaffen Primary Keys zu definieren. Da in der Spalte &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; u.U. bei verschiedenen Geräten gleiche Namen vorkommen können, sollte der Primary Key um den Gerätenamen erweitert werden. Der Primary Key sollte also aus &amp;lt;code&amp;gt;DEVICE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; bestehen. Um in der Datenbank &#039;&#039;fhem&#039;&#039; diesen PK zu setzen, kann folgender SQL Code verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE `fhem`.`current` &lt;br /&gt;
CHANGE COLUMN `DEVICE` `DEVICE` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
CHANGE COLUMN `READING` `READING` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
ADD PRIMARY KEY (`DEVICE`, `READING`);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== history ====&lt;br /&gt;
Die Tabelle history enthält alle bisher geloggten Daten. Löschen in dieser Tabelle bedeutet automatisch Datenverlust (gewollt oder nicht ... )&lt;br /&gt;
Der Inhalt dieser Tabelle wird verwendet, um die Plots zu zeichnen.&lt;br /&gt;
&lt;br /&gt;
== Anpassen der gplot-Konfigurationen ==&lt;br /&gt;
Die meisten gplot-Konfigurationen sind bisher lediglich auf FileLog-Konfigurationen ausgelegt. Deshalb müssen sie für die Verwendung mit DbLog angepasst werden. Glücklicherweise beschränkt sich dies auf die reinen FileLog-Zeilen - es müssen die DbLog-Äquivalente hinzugefügt werden. Die FileLog-Einträge müssen zwar nicht gelöscht werden, wenn man aber FileLog und DbLog parallel betreibt, sollte man getrennte gplot-Dateien für beide Logging-Typen haben um Auswertungsprobleme erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Für die fht.gplot Konfiguration sähe die Anpassung wie folgt aus (lediglich die vier DbLog-Zeilen wurden hinzugefügt):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-12-25 21:53:30&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
set y2tics &lt;br /&gt;
set grid y2tics&lt;br /&gt;
set ylabel &amp;quot;Actuator/Window (%)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set yrange 0:100&lt;br /&gt;
set y2range 5:25&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:.measured-temp\x3a:0:&lt;br /&gt;
#FileLog 4:.actuator\x3a:0:int&lt;br /&gt;
#FileLog 4:.desired-temp::&lt;br /&gt;
#FileLog 4:.window\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.measured-temp:0:&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.actuator:0:int&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.desired-temp::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.window::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Measured temperature&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Actuator (%)&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Desired Temperature&#039; ls l2 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Window&#039; ls l3 lw 1 with steps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten: &lt;br /&gt;
&lt;br /&gt;
On-Off-Plots&lt;br /&gt;
&lt;br /&gt;
 EG_Bad:window:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:0/eg&lt;br /&gt;
&lt;br /&gt;
unter Berücksichtigung von dim-Werten:&lt;br /&gt;
&lt;br /&gt;
 EG_WoZi_Licht:value:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:($1eq&amp;quot;dim&amp;quot;?$2*0.01:0)/eg&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer SQLite-Datenbank ==&lt;br /&gt;
Im folgenden wird eine lokale SQLite-Datenbank auf einen Ubuntu-System angelegt (nach Quelle: [http://www.tatsch-it.de/fhem-dblog/ http://www.tatsch-it.de/fhem-dblog/])&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Installation von SQLite:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo aptitude install sqlite3 libdbi-perl libdbd-sqlite3-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anlegen der SQLite-Datenbank fhem.db&#039;&#039; (öffnet auch direkt eine SQL-Kommandozeile):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE &#039;history&#039; (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE TABLE &#039;current&#039; (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anpassen des Besitzers und der Rechte der Datenbank-Datei:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown fhem /opt/fhem/fhem.db&lt;br /&gt;
sudo chmod 666 /opt/fhem/fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Datenbank-Anbindung des FHEM konfigurieren:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/db.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%dbconfig= (&lt;br /&gt;
  connection =&amp;gt; &amp;quot;SQLite:dbname=/opt/fhem/fhem.db&amp;quot;,&lt;br /&gt;
  user =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
  password =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Logging des FHEM auf die Datenbank konfigurieren:&#039;&#039; (hier sind nur die Anpassungen aufgeführt)&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/fhem.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
attr global userattr DbLogExclude ...  # erlaubt es einzelne Einträge nicht zu loggen&lt;br /&gt;
...&lt;br /&gt;
define logdb DbLog ./db.conf .*:.*     # logt alle(!) auflaufenden Events aller Konfigurationen&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da durch diese &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Definition alle auflaufenden Events gelogt werden, müssen keine weiteren Anpassungen in der Konfiguration gemacht werden. Die FileLog-Einträge können bedenkenlos bestehen bleiben - dann wird in Datenbank und FileLog gelogt und man verliert keine Daten, falls etwas nicht klappt. Wenn alles wie geplant läuft, können die FileLog-Definitionen gelöscht werden (ebenso die Log-Dateien). Ebenso können die zu loggenden Daten später eingegrenzt werden (s. [[#Finetuning des Loggings]]).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;FHEM neu starten:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo service fhem stop&lt;br /&gt;
sudo service fhem start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Kontrollieren, ob Logs in die Datenbank geschrieben werden:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select * from history order by TIMESTAMP;       # dies gibt alle(!) Logs chronologisch aus (kann nach längerem Betrieb recht lange dauern)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anpassung der glot-Dateien:&#039;&#039; siehe [[#Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer Mysql-Datenbank ==&lt;br /&gt;
Anstatt nano kann jeder andere kompatible Editor verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Unter Ubuntu/debian: &lt;br /&gt;
 apt-get update &amp;amp;&amp;amp; apt-get install mysql-server mysql-client libdbd-mysql libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollte man aus Sicherheitsgründen ein Passwort für den mysql-root vergeben, wenn man nicht sogar ganz den Login verbietet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: im Folgenden ist &amp;quot;#&amp;quot; der normale Prompt und &amp;quot;mysql&amp;gt;&amp;quot; der prompt innerhalb mysql, dieser kann mit exit verlassen werden. &lt;br /&gt;
&lt;br /&gt;
Zum Test mal mit mysql verbinden:&lt;br /&gt;
 # mysql -p -u root&lt;br /&gt;
 Enter password:&lt;br /&gt;
 mysql&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Jetzt die Tabellenstruktur anlegen. &lt;br /&gt;
Hierfür kann die Datei /opt/fhem/contrib/dblog/db_create_mysql.sql als Vorlage verwendet und das Passwort und der Benutzername geändert werden. &lt;br /&gt;
 cp /opt/fhem/contrib/dblog/db_create_mysql.sql&lt;br /&gt;
 nano db_create_mysql.sql&lt;br /&gt;
Dann wird die Datei eingelesen (root Passwort wird abgefragt): &lt;br /&gt;
&lt;br /&gt;
 # mysql -u root -p &amp;lt; db_create_mysql.sql&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man den Zugang testen: &lt;br /&gt;
&lt;br /&gt;
 # mysql -p -u &amp;lt;fhemuser&amp;gt;&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; show databases;&lt;br /&gt;
&lt;br /&gt;
Nun müsste eine Datenbank &amp;quot;fhem&amp;quot; angezeigt werden, die die Tabellen current und history enthält.&lt;br /&gt;
&lt;br /&gt;
Nun in der Datei db.conf den mysql-Block auskommentieren und ebenfalls Benutzername, Passwort UND HOST anpassen. Leider ist hier nicht standardmäßig localhost eingestellt.&lt;br /&gt;
 nano /opt/fhem/db.conf&lt;br /&gt;
&lt;br /&gt;
Jetzt kann unter FHEM ein DbLog-Device angelegt werden (mit dem beispiel wird alles geloggt: &lt;br /&gt;
 define logdb DbLog ./db.conf .*:.*&lt;br /&gt;
Als State muss ein &amp;quot;connected&amp;quot; angezeigt werden. &lt;br /&gt;
&lt;br /&gt;
Ein rereadcfg in Fhem stellt sicher, dass die neue Konfiguration übernommen wird - ein Neustart ist nicht erforderlich&lt;br /&gt;
&lt;br /&gt;
Nun kann die Funktion noch einmal überprüft werden: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 # mysql -u &amp;lt;fhemuser&amp;gt; -p&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; use fhem;&lt;br /&gt;
 Database changed&lt;br /&gt;
 mysql&amp;gt; show tables;&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | Tables_in_fhem |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | current        |&lt;br /&gt;
 | history        |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 2 rows in set (0,00 sec)&lt;br /&gt;
 mysql&amp;gt; select * from history; # Achtung, kann sehr groß werden .... #&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration von DBLog in eigene Module ==&lt;br /&gt;
=== Bereitstellung der UNITS ===&lt;br /&gt;
Mit der DbLog_splitFn kann der Modulautor selbst festlegen, wie die Events des Moduls in die Bestandteile Reading/Value/Unit zerlegt werden um ein korrektes Logging per DbLog zu gewährleisten.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Modulautor in der [[DevelopmentModuleIntro#X_Initialize|Initialize-Funktion]] eine &amp;lt;code&amp;gt;DbLog_splitFn&amp;lt;/code&amp;gt; bereitstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub X_Initialize($)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash) = @_;&lt;br /&gt;
	...&lt;br /&gt;
	$hash-&amp;gt;{DbLog_splitFn}      = &amp;quot;X_DbLog_splitFn&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genaue Aufrufsyntax und Funktionweise einer DbLog_split-Funktion findet man [[DevelopmentModuleIntro#X_DbLog_split|hier]].&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Beim Anlegen der Datenbank per script wird die Value-Spalte nur als Varchar(32) definiert. Dieses kann dazu führen, dass besonders lange Readings (z.b. vom Modul sysmon) abgeschnitten werden und nicht in der Datenbank landen. Dieses lässt sich leicht beheben, indem man die Spalte auf Varchar(64) ändert (siehe auch {{Link2Forum|Topic=25648|Message=252433|LinkText=diesen Forenbeitrag}}).&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; ALTER TABLE current MODIFY VALUE VARCHAR(64);&lt;br /&gt;
 mysql&amp;gt; ALTER TABLE history MODIFY VALUE VARCHAR(64);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Werte auslesen ==&lt;br /&gt;
Manchmal möchte man Daten aus den Logs abrufen ohne händisch in der Datenbank herumzuwühlen (s.u.). Dies ist insb. auch dann hilfreich, wenn man eigenen Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich beschrieben ist dies in der [http://fhem.de/commandref_DE.html#DbLog commandref#DbLog] und unterscheidet sich minimal (aber entscheidend) von der Struktur bei [[FileLog#Werte_auslesen|FileLogs]].&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele, was man damit anstellen kann:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01 2016-10-03 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor vom 01.10.-03.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor von 8-16 Uhr am 01.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor:temperature&amp;lt;/code&amp;gt; nur die temperature Werte&lt;br /&gt;
* &amp;lt;code&amp;gt;{ ReadingsTimestamp(&amp;quot;meinSensor&amp;quot;,&amp;quot;state&amp;quot;,&amp;quot;0&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des aktuellen state des meinSensor&lt;br /&gt;
* &amp;lt;code&amp;gt;{ OldTimestamp(&amp;quot;meinSensor&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des letzten state des FHT_3a32&lt;br /&gt;
* &amp;lt;code&amp;gt;{ time_str2num(OldTimestamp(&amp;quot;meinSensor&amp;quot;)) }&amp;lt;/code&amp;gt; Timestamp in Sekunden des letzten state des meinSensor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung von Datenbank-Einträgen ==&lt;br /&gt;
{{Hinweis|Dieser Abschnitt soll lediglich eine kleine Einführung in die Datenbank-Bearbeitung liefern. Für vertiefende Informationen sollte man sich grundsätzlich mit SQL beschäftigen. Eine umfassende und gut verständliche Anleitung zu SQL bietet bspw. [http://www.w3schools.com/sql/default.asp w3schools].}}&lt;br /&gt;
Irgendwann wird der Fall eintreten, dass in der Datenbank Einträge drinstehen, die geändert oder gelöscht werden sollen (zB. fehlerhafte Sensor-Rückmeldungen, umbenannte Readings). In klassischen Log-Dateien würde man diese einfach bearbeiten und löschen/anpassen (wobei man aber tunlichst zuvor den fhem ausmacht um Datenfehler zu vermeiden). Eine Datenbank kann bearbeitet werden ohne den fhem abschalten zu müssen. &lt;br /&gt;
&lt;br /&gt;
Datenbanken kann man ohne weiter Hilfsmittel direkt von der Kommandozeile/Shell aus bearbeiten. Alternativ gibt es auch verschiedenste Tools (webbasiert oder als Applikation), die einen dabei unterstützen (Bsp. findet man u.a. [https://wiki.ubuntuusers.de/SQLite/#Grafische-Benutzeroberflaechen hier]). Für einfache Arbeiten reicht allerdings idR. Shell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
&#039;&#039;&#039;Öffnen der DB unter Linux:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(Es werden Schreibrechte benötigt,ohne kann man die DB zwar öffnen, aber nichts machen)&lt;br /&gt;
 sudo sqlite3 fhem.db&lt;br /&gt;
Dadurch öffnet sich ein SQL-Konsole, auf der alle weiteren Befehle ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schliessen der DB:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfe anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Tabellen anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Schema der DB anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(vgl. oben [[DbLog#Datenbanken]] und [[DbLog#Beispiel: Anlegen und Nutzung einer SQLite-Datenbank]])&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Eintäge anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Die Einträge liegen alle in der Tabelle &amp;quot;History&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ganz wichtig&#039;&#039;&#039; ist immer das &amp;quot;;&amp;quot; am Ende Zeile (bei allen Kommandos, die nicht mit einem &amp;quot;.&amp;quot; anfangen). Wenn es vergessen wurde zeigt die Konsole solange neue Zeilen bis ein &amp;quot;;&amp;quot; eingegeben wird. So kann ein Befehl auch bequem über mehrere Zeilen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY;&lt;br /&gt;
&lt;br /&gt;
Dies kann sehr lange dauern und kann ggf. mit &amp;lt;code&amp;gt;STRG-C&amp;lt;/code&amp;gt; abgebrochen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Statements werden Strings in einfache Anführungsstriche gesetzt, Zahlen nicht.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LÖSCHEN aller Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Löschen kann nicht rückgängig gemacht werden!! Also IMMER erst die entsprechenden SELECT-Statements solange verfeinern bis wirklich nur die gewünschten Einträge angezeigt werden. Dann das &amp;lt;code&amp;gt;select *&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; ersetzen.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; delete from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datenbank reparieren ==&lt;br /&gt;
Es kann immer wieder mal vorkommen, dass Datenbanken Fehler enthalten. Das muss im Alltag garnicht auffallen und auch nicht immer schlimm enden. Wenn man auf der SQL-Konsole aber bspw. eine Meldung &amp;lt;code&amp;gt;Error: database disk image is malformed&amp;lt;/code&amp;gt; erhält, sollte man ein Reparatur vornehmen.&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
Die folgenden Schritte beschreiben, wie man eine SQLite-DB reparieren kann (Quelle: [http://techblog.dorogin.com/2011/05/sqliteexception-database-disk-image-is.html]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
DB öffnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Integritäts-Check durchführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sqlite&amp;gt; pragma integrity_check;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt hier ein &amp;quot;ok&amp;quot; ist die DB gesund. Ansonsten erscheint etwas wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** in database main ***&lt;br /&gt;
On tree page 118786 cell 1: Rowid 75 out of order (previous was 816660)&lt;br /&gt;
On tree page 118786 cell 4: Rowid 815704 out of order (previous was 816727)&lt;br /&gt;
Corruption detected in cell 0 on page 118786&lt;br /&gt;
Multiple uses for byte 132 of page 118786&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Datenbank-Dump erstellen (Export gesamten DB in die Datei &amp;quot;dump_all_20160516_1043.sql&amp;quot;) und DB verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .mode insert&lt;br /&gt;
sqlite&amp;gt; .output dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; .dump&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Neue Datenbank erstellen und den Dump einlesen, Integritäts-Check machen und verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem-neu.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .read dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; pragma integrity_check;&lt;br /&gt;
ok&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Spätestens jetzt fhem stoppen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem stop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Alte DB sichern und neue aktivieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv fhem.db fhem.db.sv_20160516&lt;br /&gt;
sudo mv fhem-neu.db fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Kontrollieren, dass die neue DB die gleichen Rechte wie die alte DB hat (und ggf. korrigieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 root root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
~/fhem$ sudo chown fhem:root fhem.db&lt;br /&gt;
&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 fhem root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fhem wieder starten (und natürlich kontrollieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nützliche Codeschnipsel ==&lt;br /&gt;
Anbei ein paar nützliche Codeschnipsel rund um DbLog&lt;br /&gt;
&lt;br /&gt;
=== Dateigrösse mitloggen ===&lt;br /&gt;
Da die Datenbank ins Unermessliche wachsen kann, empfiehlt es sich - je nach Speicherplatz - ab einer bestimmten Grösse tätig zu werden. Dazu muss diese Grösse allerdings ermittelt werden. Diese geschieht mittels des Userreadings, welches man vorteilshafterweise mit im DbLog-device anlegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;attr myDbLog userReadings DbFileSize:lastReduceLogResult.* { (split(&#039; &#039;,`du -m fhem.db`))[0] }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels dieses Attributs wird die Grösse der .db-Datei immer nach dem Ausführen des ReduceLog in das Reading &amp;quot;DbFileSize&amp;quot; in ganzzahligen MByte abgelegt.&lt;br /&gt;
&lt;br /&gt;
Basierend auf diesem Reading können dann weitere Aktionen, beispielsweise ein Plot, erstellt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Heizleistung_und_Gasverbrauch|Beispiel das DbLog-Daten für SVG-Plots verwendet]]&lt;br /&gt;
* [[SVG-Plots von FileLog auf DbLog umstellen]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=22064</id>
		<title>DbLog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=22064"/>
		<updated>2017-08-05T07:43:00Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: SQL: Hinweis auf Einbinden der db.conf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Protokolliert Ereignisse in einer Datenbank&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=93_DbLog.pm&lt;br /&gt;
|ModOwner=tobiasfaust ({{Link2FU|118|Forum}}/[[Benutzer Diskussion:Tobias.faust|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Mit der Zeit entstehen im fhem recht umfangreiche Log-Daten für die verschiedensten konfigurierten Devices. Die übliche Einstiegs-[[Konfiguration]] sieht vor, dass die Logs als [http://fhem.de/commandref_DE.html#FileLog FileLog] gespeichert werden - je nach Einstellung in wenigen sehr großen oder vielen kleineren Dateien. Der Datei-basierte Zugriff ist allerdings nicht wirklick performant und kann schnell zum Flaschenhals werden (z.B. bei der Darstellung von Graphen über einen längeren Zeitraum).&lt;br /&gt;
&lt;br /&gt;
Alternativ kann Fhem die Log-Daten mittels [http://fhem.de/commandref_DE.html#DbLog DbLog] in einer Datenbank speichern. Diese kann lokal als einfache SQLite- oder als zentrale Server-Datenbank (s.u.) gestaltet sein. Schon eine lokale einfache SQLite-Datenbank ist in der Regel deutlich performanter als File-basierte Logs.&lt;br /&gt;
&lt;br /&gt;
Damit eine Datenbank-Nutzung möglich ist, müssen folgende Anpassungen gemacht werden:&lt;br /&gt;
# [[#Datenbank|Erstellen einer entsprechenden Datenbank]]&lt;br /&gt;
# [[#Datenbank-Anbindung mittels db.conf|Konfiguration der Datenbank-Anbindung in FHEM]]&lt;br /&gt;
# [[#Konfiguration als Device in fhem.cfg|Anpassen aller (oder einzelner) Konfigurationen von FileLog nach DbLog]]&lt;br /&gt;
# [[#Anpassen der gplot-Konfigurationen|Ggf. Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Datenbank-Anbindung mittels db.conf ===&lt;br /&gt;
DbLog wird durch 2 verschiedene Einträge aktiviert/definiert. In einer Datei namens &#039;&#039;&#039;db.conf&#039;&#039;&#039; werden die Parameter für eine Verbindung zur Datenbank (host, username, password, etc.) hinterlegt. Diese Datei kann in einem beliebigen Verzeichnis angelegt werden. Für eine MySQL-Datenbank sieht die db.conf folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
 %dbconfig= (&lt;br /&gt;
     connection =&amp;gt; &amp;quot;mysql:database=fhem;host=db;port=3306&amp;quot;,&lt;br /&gt;
     user =&amp;gt; &amp;quot;fhemuser&amp;quot;,&lt;br /&gt;
     password =&amp;gt; &amp;quot;fhempassword&amp;quot;,&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation befindet sich eine Beispielkonfiguration mit der Syntax für jeden unterstützen Datenbanktyp.&lt;br /&gt;
Es wird empfohlen diese Datei zu kopieren und erst dann entsprechend zu bearbeiten. Am Besten kopiert man diese Datei in das FHEM Home Directory /opt/fhem/ und achtet auf die entsprechenden Rechte!&lt;br /&gt;
 chown fhem:dialout /opt/fhem/db.conf&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration als Device ===&lt;br /&gt;
Das DbLog Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; DbLog &amp;lt;configfilename&amp;gt; &amp;lt;regexp&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;&amp;lt;configfilename&amp;gt;&#039;&#039; dem Pfad zur zuvor angelegten db.conf entspricht.&lt;br /&gt;
Ein Beispiel hierfür wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;&lt;br /&gt;
Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit vielen teils irrelevanten Werten gefüllt wird. Man kann daher die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Dies ist in [[#Finetuning des Loggings]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
Bei der Konfiguration des Log-Devices werden die zu loggenden Daten definiert - in der einfachsten Form sieht das so aus: &amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;. Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit sehr vielen und teils nicht benötigten Werten gefüllt wird und schnell wächst. Die Datenbank ist zwar deutlich leistungsfähiger, was große Datenmengen angeht, Datensparsamkeit kann aber schnell sinnvoll werden...&lt;br /&gt;
&lt;br /&gt;
Um das Log-Aufkommen einzugrenzen gibt es 2 Ansätze:&lt;br /&gt;
* Einschränkung über den &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag&lt;br /&gt;
* Einschränkung über DbLogExclude-Einträge der jeweiligen Devices&lt;br /&gt;
* Einschränkung über DbLogInclude-Einträge des jeweiligen Devices&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über den zentralen &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag ====&lt;br /&gt;
Man kann die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Die erste Wildcard, also das erste &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;, entspricht dem in FHEM verwendeten Device-Namen. Die zweite Wildcard entspricht dem vom Device ausgegebenen zu loggenden Wert. Separiert werden beiden Angaben durch einen Doppelpunkt. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel, um zwar alle definierten Devices zu erfassen, aber nur die Werte Temperatur, Ventilposition und Luftfeuchte in die Datenbank zu schreiben wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define myDbLog DbLog ./db.conf .*:(temperature|valveposition|humidity).* &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Man kann die zu loggenden Werte für einzelne Devices separat einschränken, ohne dies im zentralen define-Eintrag machen zu müssen. Dies kann interessant sein, wenn beispielsweise ein Device Fehlerwerte meldet, die uninteressant sind, oder es meldet unnötig häufig Werte - beides ist z.B. bei 1-wire-Temperatursensoren gerne der Fall.&lt;br /&gt;
&lt;br /&gt;
Um das einzuschränken gibt es 2 Stellparameter, die als Attribute direkt zum jeweiligen Device konfiguriert werden:&lt;br /&gt;
* DbLogExclude - definiert Werte, die nicht geloggt werden sollen&lt;br /&gt;
* DbLogInclude - definiert Werte, die geloggt werden sollen ( siehe attr DbLogSelectionMode )&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. [http://fhem.de/commandref_DE.html#event-on-update-reading commandref])&lt;br /&gt;
&lt;br /&gt;
Eine konkrete Konfiguration für einen sehr gesprächigen 1-wire-Temperatursensor könnte wie folgt aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define EG_Balkon GPIO4 BUSMASTER&lt;br /&gt;
attr EG_Balkon DbLogExclude failures,T,85     # logge keine &amp;quot;failures&amp;quot;, &amp;quot;T&amp;quot;-Werte und &amp;quot;85&amp;quot;-Werte (default-Werte, wenn keine Temperatur gelesen werden kann)&lt;br /&gt;
attr EG_Balkon event-on-change-reading state  # logge nur, wenn sich ein Wert ändert (wenn sich die Temperatur nicht ändert, logge das nicht)&lt;br /&gt;
attr EG_Balkon event-min-interval state:900   # logge spätestens alle 900sec = 15min&lt;br /&gt;
attr EG_Balkon event-on-update-reading .*     # logge alle Werte, die aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;1-Wire-Device vom Typ OWTHERM oder OWSWITCH&amp;gt; DbLogExclude data.*      # verhindert das Logging der state-Eintragungen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine in diesem {{Link2Forum|Topic=33697|Message=264127}} vorgestellte Strategie zur Vermeidung unnötigen Loggings ist, dass bei der Definition von Devices durch das nachfolgende &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; automatisch ein DbLogExclude für alle Werte (.*) des Devices zugewiesen wird und dies nur bei Interesse an geloggten Werten gelöscht bzw. angepasst wird:&lt;br /&gt;
&amp;lt;code&amp;gt;define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso ist es mittlerweile möglich, lediglich erwünschte Werte (Positiv-Liste) zu loggen und alle anderen zu verwerfen. Hierfür wird im LogDevice das attribut DbLogSelectionMode Include verwendet. Nun kann für jedes Device mit DbLogInclude &amp;lt;Reading1&amp;gt;,&amp;lt;Reading2&amp;gt;,... angegeben werden, welche Readings geloggt werden sollen. &lt;br /&gt;
Integriert ist ebenfalls ein &amp;quot;min-interval&amp;quot;, siehe commandref.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme (Auswahl):&lt;br /&gt;
* Sqlite&lt;br /&gt;
* MySQL&lt;br /&gt;
* PostGreSql&lt;br /&gt;
&lt;br /&gt;
=== Tabellen ===&lt;br /&gt;
Die Datenbank ist relativ simpel gestaltet und besteht lediglich aus den folgenden beiden Tabellen:&lt;br /&gt;
* current&lt;br /&gt;
* history&lt;br /&gt;
&lt;br /&gt;
DbLog ist auf eine feste Tabellenstruktur angewiesen. Man muss daher in seiner Datenbank eine Tabelle mit folgenden Spalten anlegen:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Spalte&lt;br /&gt;
! Beschreibung (en)&lt;br /&gt;
! Beschreibung (de)&lt;br /&gt;
! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TIMESTAMP&#039;&#039;&#039;&lt;br /&gt;
| timestamp of event&lt;br /&gt;
| Zeitstempel&lt;br /&gt;
| 2007-12-30 21:45:22 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DEVICE&#039;&#039;&#039;&lt;br /&gt;
| device name&lt;br /&gt;
| Device-Name&lt;br /&gt;
| Wetterstation&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TYPE&#039;&#039;&#039;&lt;br /&gt;
| device type&lt;br /&gt;
| Device-Typ&lt;br /&gt;
| KS300&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;EVENT&#039;&#039;&#039;&lt;br /&gt;
| event specification as full string&lt;br /&gt;
| Eventspezifikation als Text&lt;br /&gt;
| humidity: 71 (%)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;READING&#039;&#039;&#039;&lt;br /&gt;
| name of reading extracted from event&lt;br /&gt;
| Bezeichnung des Readings&lt;br /&gt;
| humidity&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VALUE&#039;&#039;&#039;&lt;br /&gt;
| actual reading extracted from event&lt;br /&gt;
| Wert des Readings&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UNIT&#039;&#039;&#039;&lt;br /&gt;
| unit extracted from event&lt;br /&gt;
| Einheit des Readings&lt;br /&gt;
| %&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Vorlagen zur Anlage von Tabellen und Indizes sind für jeden unterstützten Datenbanktyp im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation, oder hier zu finden: [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/dblog/ Link]. Das MySQL-Skript (db_create_mysql.sql) legt eine neue Datenbank, das PostGres-Skript (db_create_postgresql.sql) ein neues Schema mit Namen &amp;quot;fhem&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
==== current ====&lt;br /&gt;
Die Tabelle current enthält für jedes zu loggende Device lediglich den letzten Wert. Falls noch kein Wert geloggt wurde, ist diese Tabelle leer. &lt;br /&gt;
Falls der Inhalt gelöscht wird, bauen sich die Daten automatisch wieder auf. Es gehen durch das löschen der Tabelle current keine Log-Informationen verloren.&lt;br /&gt;
Der Inhalt wird aber u.a. für die Dropdown-Felder beim Plot-Editor verwendet.&lt;br /&gt;
&lt;br /&gt;
Um doppelte Einträge in der Tabelle zu vermeiden, wurden die Möglichkeit geschaffen Primary Keys zu definieren. Da in der Spalte &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; u.U. bei verschiedenen Geräten gleiche Namen vorkommen können, sollte der Primary Key um den Gerätenamen erweitert werden. Der Primary Key sollte also aus &amp;lt;code&amp;gt;DEVICE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; bestehen. Um in der Datenbank &#039;&#039;fhem&#039;&#039; diesen PK zu setzen, kann folgender SQL Code verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE `fhem`.`current` &lt;br /&gt;
CHANGE COLUMN `DEVICE` `DEVICE` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
CHANGE COLUMN `READING` `READING` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
ADD PRIMARY KEY (`DEVICE`, `READING`);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== history ====&lt;br /&gt;
Die Tabelle history enthält alle bisher geloggten Daten. Löschen in dieser Tabelle bedeutet automatisch Datenverlust (gewollt oder nicht ... )&lt;br /&gt;
Der Inhalt dieser Tabelle wird verwendet, um die Plots zu zeichnen.&lt;br /&gt;
&lt;br /&gt;
== Anpassen der gplot-Konfigurationen ==&lt;br /&gt;
Die meisten gplot-Konfigurationen sind bisher lediglich auf FileLog-Konfigurationen ausgelegt. Deshalb müssen sie für die Verwendung mit DbLog angepasst werden. Glücklicherweise beschränkt sich dies auf die reinen FileLog-Zeilen - es müssen die DbLog-Äquivalente hinzugefügt werden. Die FileLog-Einträge müssen zwar nicht gelöscht werden, wenn man aber FileLog und DbLog parallel betreibt, sollte man getrennte gplot-Dateien für beide Logging-Typen haben um Auswertungsprobleme erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Für die fht.gplot Konfiguration sähe die Anpassung wie folgt aus (lediglich die vier DbLog-Zeilen wurden hinzugefügt):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-12-25 21:53:30&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
set y2tics &lt;br /&gt;
set grid y2tics&lt;br /&gt;
set ylabel &amp;quot;Actuator/Window (%)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set yrange 0:100&lt;br /&gt;
set y2range 5:25&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:.measured-temp\x3a:0:&lt;br /&gt;
#FileLog 4:.actuator\x3a:0:int&lt;br /&gt;
#FileLog 4:.desired-temp::&lt;br /&gt;
#FileLog 4:.window\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.measured-temp:0:&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.actuator:0:int&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.desired-temp::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.window::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Measured temperature&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Actuator (%)&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Desired Temperature&#039; ls l2 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Window&#039; ls l3 lw 1 with steps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten: &lt;br /&gt;
&lt;br /&gt;
On-Off-Plots&lt;br /&gt;
&lt;br /&gt;
 EG_Bad:window:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:0/eg&lt;br /&gt;
&lt;br /&gt;
unter Berücksichtigung von dim-Werten:&lt;br /&gt;
&lt;br /&gt;
 EG_WoZi_Licht:value:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:($1eq&amp;quot;dim&amp;quot;?$2*0.01:0)/eg&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer SQLite-Datenbank ==&lt;br /&gt;
Im folgenden wird eine lokale SQLite-Datenbank auf einen Ubuntu-System angelegt (nach Quelle: [http://www.tatsch-it.de/fhem-dblog/ http://www.tatsch-it.de/fhem-dblog/])&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Installation von SQLite:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo aptitude install sqlite3 libdbi-perl libdbd-sqlite3-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anlegen der SQLite-Datenbank fhem.db&#039;&#039; (öffnet auch direkt eine SQL-Kommandozeile):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE &#039;history&#039; (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE TABLE &#039;current&#039; (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anpassen des Besitzers und der Rechte der Datenbank-Datei:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown fhem /opt/fhem/fhem.db&lt;br /&gt;
sudo chmod 666 /opt/fhem/fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Datenbank-Anbindung des FHEM konfigurieren:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/db.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%dbconfig= (&lt;br /&gt;
  connection =&amp;gt; &amp;quot;SQLite:dbname=/opt/fhem/fhem.db&amp;quot;,&lt;br /&gt;
  user =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
  password =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Logging des FHEM auf die Datenbank konfigurieren:&#039;&#039; (hier sind nur die Anpassungen aufgeführt)&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/fhem.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
attr global userattr DbLogExclude ...  # erlaubt es einzelne Einträge nicht zu loggen&lt;br /&gt;
...&lt;br /&gt;
define logdb DbLog ./db.conf .*:.*     # logt alle(!) auflaufenden Events aller Konfigurationen&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da durch diese &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Definition alle auflaufenden Events gelogt werden, müssen keine weiteren Anpassungen in der Konfiguration gemacht werden. Die FileLog-Einträge können bedenkenlos bestehen bleiben - dann wird in Datenbank und FileLog gelogt und man verliert keine Daten, falls etwas nicht klappt. Wenn alles wie geplant läuft, können die FileLog-Definitionen gelöscht werden (ebenso die Log-Dateien). Ebenso können die zu loggenden Daten später eingegrenzt werden (s. [[#Finetuning des Loggings]]).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;FHEM neu starten:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo service fhem stop&lt;br /&gt;
sudo service fhem start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Kontrollieren, ob Logs in die Datenbank geschrieben werden:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select * from history order by TIMESTAMP;       # dies gibt alle(!) Logs chronologisch aus (kann nach längerem Betrieb recht lange dauern)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&#039;&#039;Anpassung der glot-Dateien:&#039;&#039; siehe [[#Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Praxishinweis ===&lt;br /&gt;
Findet sich im Fhem.log der Fehlerhinweis: &amp;lt;code&amp;gt;DbLog logdb - Error while reading ./db.conf: &#039;Error on reading ./db.conf from database!&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
dann sollte in FHEM mit diesem Befehl die Konfiguration integriert werden:&lt;br /&gt;
&amp;lt;code&amp;gt;configdb fileimport /opt/fhem/db.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer Mysql-Datenbank ==&lt;br /&gt;
Anstatt nano kann jeder andere kompatible Editor verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Unter Ubuntu/debian: &lt;br /&gt;
 apt-get update &amp;amp;&amp;amp; apt-get install mysql-server mysql-client libdbd-mysql libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollte man aus Sicherheitsgründen ein Passwort für den mysql-root vergeben, wenn man nicht sogar ganz den Login verbietet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: im Folgenden ist &amp;quot;#&amp;quot; der normale Prompt und &amp;quot;mysql&amp;gt;&amp;quot; der prompt innerhalb mysql, dieser kann mit exit verlassen werden. &lt;br /&gt;
&lt;br /&gt;
Zum Test mal mit mysql verbinden:&lt;br /&gt;
 # mysql -p -u root&lt;br /&gt;
 Enter password:&lt;br /&gt;
 mysql&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Jetzt die Tabellenstruktur anlegen. &lt;br /&gt;
Hierfür kann die Datei /opt/fhem/contrib/dblog/db_create_mysql.sql als Vorlage verwendet und das Passwort und der Benutzername geändert werden. &lt;br /&gt;
 cp /opt/fhem/contrib/dblog/db_create_mysql.sql&lt;br /&gt;
 nano db_create_mysql.sql&lt;br /&gt;
Dann wird die Datei eingelesen (root Passwort wird abgefragt): &lt;br /&gt;
&lt;br /&gt;
 # mysql -u root -p &amp;lt; db_create_mysql.sql&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man den Zugang testen: &lt;br /&gt;
&lt;br /&gt;
 # mysql -p -u &amp;lt;fhemuser&amp;gt;&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; show databases;&lt;br /&gt;
&lt;br /&gt;
Nun müsste eine Datenbank &amp;quot;fhem&amp;quot; angezeigt werden, die die Tabellen current und history enthält.&lt;br /&gt;
&lt;br /&gt;
Nun in der Datei db.conf den mysql-Block auskommentieren und ebenfalls Benutzername, Passwort UND HOST anpassen. Leider ist hier nicht standardmäßig localhost eingestellt.&lt;br /&gt;
 nano /opt/fhem/db.conf&lt;br /&gt;
&lt;br /&gt;
Jetzt kann unter FHEM ein DbLog-Device angelegt werden (mit dem beispiel wird alles geloggt: &lt;br /&gt;
 define logdb DbLog ./db.conf .*:.*&lt;br /&gt;
Als State muss ein &amp;quot;connected&amp;quot; angezeigt werden. &lt;br /&gt;
&lt;br /&gt;
Ein rereadcfg in Fhem stellt sicher, dass die neue Konfiguration übernommen wird - ein Neustart ist nicht erforderlich&lt;br /&gt;
&lt;br /&gt;
Nun kann die Funktion noch einmal überprüft werden: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 # mysql -u &amp;lt;fhemuser&amp;gt; -p&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; use fhem;&lt;br /&gt;
 Database changed&lt;br /&gt;
 mysql&amp;gt; show tables;&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | Tables_in_fhem |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | current        |&lt;br /&gt;
 | history        |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 2 rows in set (0,00 sec)&lt;br /&gt;
 mysql&amp;gt; select * from history; # Achtung, kann sehr groß werden .... #&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration von DBLog in eigene Module ==&lt;br /&gt;
=== Bereitstellung der UNITS ===&lt;br /&gt;
Mit der DbLog_splitFn kann der Modulautor selbst festlegen, wie die Events des Moduls in die Bestandteile Reading/Value/Unit zerlegt werden um ein korrektes Logging per DbLog zu gewährleisten.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Modulautor in der [[DevelopmentModuleIntro#X_Initialize|Initialize-Funktion]] eine &amp;lt;code&amp;gt;DbLog_splitFn&amp;lt;/code&amp;gt; bereitstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub X_Initialize($)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash) = @_;&lt;br /&gt;
	...&lt;br /&gt;
	$hash-&amp;gt;{DbLog_splitFn}      = &amp;quot;X_DbLog_splitFn&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genaue Aufrufsyntax und Funktionweise einer DbLog_split-Funktion findet man [[DevelopmentModuleIntro#X_DbLog_split|hier]].&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Beim Anlegen der Datenbank per script wird die Value-Spalte nur als Varchar(32) definiert. Dieses kann dazu führen, dass besonders lange Readings (z.b. vom Modul sysmon) abgeschnitten werden und nicht in der Datenbank landen. Dieses lässt sich leicht beheben, indem man die Spalte auf Varchar(64) ändert (siehe auch {{Link2Forum|Topic=25648|Message=252433|LinkText=diesen Forenbeitrag}}).&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; ALTER TABLE current MODIFY VALUE VARCHAR(64);&lt;br /&gt;
 mysql&amp;gt; ALTER TABLE history MODIFY VALUE VARCHAR(64);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Werte auslesen ==&lt;br /&gt;
Manchmal möchte man Daten aus den Logs abrufen ohne händisch in der Datenbank herumzuwühlen (s.u.). Dies ist insb. auch dann hilfreich, wenn man eigenen Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich beschrieben ist dies in der [http://fhem.de/commandref_DE.html#DbLog commandref#DbLog] und unterscheidet sich minimal (aber entscheidend) von der Struktur bei [[FileLog#Werte_auslesen|FileLogs]].&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele, was man damit anstellen kann:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01 2016-10-03 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor vom 01.10.-03.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor von 8-16 Uhr am 01.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor:temperature&amp;lt;/code&amp;gt; nur die temperature Werte&lt;br /&gt;
* &amp;lt;code&amp;gt;{ ReadingsTimestamp(&amp;quot;meinSensor&amp;quot;,&amp;quot;state&amp;quot;,&amp;quot;0&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des aktuellen state des meinSensor&lt;br /&gt;
* &amp;lt;code&amp;gt;{ OldTimestamp(&amp;quot;meinSensor&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des letzten state des FHT_3a32&lt;br /&gt;
* &amp;lt;code&amp;gt;{ time_str2num(OldTimestamp(&amp;quot;meinSensor&amp;quot;)) }&amp;lt;/code&amp;gt; Timestamp in Sekunden des letzten state des meinSensor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung von Datenbank-Einträgen ==&lt;br /&gt;
{{Hinweis|Dieser Abschnitt soll lediglich eine kleine Einführung in die Datenbank-Bearbeitung liefern. Für vertiefende Informationen sollte man sich grundsätzlich mit SQL beschäftigen. Eine umfassende und gut verständliche Anleitung zu SQL bietet bspw. [http://www.w3schools.com/sql/default.asp w3schools].}}&lt;br /&gt;
Irgendwann wird der Fall eintreten, dass in der Datenbank Einträge drinstehen, die geändert oder gelöscht werden sollen (zB. fehlerhafte Sensor-Rückmeldungen, umbenannte Readings). In klassischen Log-Dateien würde man diese einfach bearbeiten und löschen/anpassen (wobei man aber tunlichst zuvor den fhem ausmacht um Datenfehler zu vermeiden). Eine Datenbank kann bearbeitet werden ohne den fhem abschalten zu müssen. &lt;br /&gt;
&lt;br /&gt;
Datenbanken kann man ohne weiter Hilfsmittel direkt von der Kommandozeile/Shell aus bearbeiten. Alternativ gibt es auch verschiedenste Tools (webbasiert oder als Applikation), die einen dabei unterstützen (Bsp. findet man u.a. [https://wiki.ubuntuusers.de/SQLite/#Grafische-Benutzeroberflaechen hier]). Für einfache Arbeiten reicht allerdings idR. Shell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
&#039;&#039;&#039;Öffnen der DB unter Linux:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(Es werden Schreibrechte benötigt,ohne kann man die DB zwar öffnen, aber nichts machen)&lt;br /&gt;
 sudo sqlite3 fhem.db&lt;br /&gt;
Dadurch öffnet sich ein SQL-Konsole, auf der alle weiteren Befehle ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schliessen der DB:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfe anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Tabellen anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Schema der DB anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(vgl. oben [[DbLog#Datenbanken]] und [[DbLog#Beispiel: Anlegen und Nutzung einer SQLite-Datenbank]])&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Eintäge anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Die Einträge liegen alle in der Tabelle &amp;quot;History&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ganz wichtig&#039;&#039;&#039; ist immer das &amp;quot;;&amp;quot; am Ende Zeile (bei allen Kommandos, die nicht mit einem &amp;quot;.&amp;quot; anfangen). Wenn es vergessen wurde zeigt die Konsole solange neue Zeilen bis ein &amp;quot;;&amp;quot; eingegeben wird. So kann ein Befehl auch bequem über mehrere Zeilen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY;&lt;br /&gt;
&lt;br /&gt;
Dies kann sehr lange dauern und kann ggf. mit &amp;lt;code&amp;gt;STRG-C&amp;lt;/code&amp;gt; abgebrochen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Statements werden Strings in einfache Anführungsstriche gesetzt, Zahlen nicht.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LÖSCHEN aller Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Löschen kann nicht rückgängig gemacht werden!! Also IMMER erst die entsprechenden SELECT-Statements solange verfeinern bis wirklich nur die gewünschten Einträge angezeigt werden. Dann das &amp;lt;code&amp;gt;select *&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; ersetzen.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; delete from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datenbank reparieren ==&lt;br /&gt;
Es kann immer wieder mal vorkommen, dass Datenbanken Fehler enthalten. Das muss im Alltag garnicht auffallen und auch nicht immer schlimm enden. Wenn man auf der SQL-Konsole aber bspw. eine Meldung &amp;lt;code&amp;gt;Error: database disk image is malformed&amp;lt;/code&amp;gt; erhält, sollte man ein Reparatur vornehmen.&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
Die folgenden Schritte beschreiben, wie man eine SQLite-DB reparieren kann (Quelle: [http://techblog.dorogin.com/2011/05/sqliteexception-database-disk-image-is.html]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
DB öffnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Integritäts-Check durchführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sqlite&amp;gt; pragma integrity_check;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt hier ein &amp;quot;ok&amp;quot; ist die DB gesund. Ansonsten erscheint etwas wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** in database main ***&lt;br /&gt;
On tree page 118786 cell 1: Rowid 75 out of order (previous was 816660)&lt;br /&gt;
On tree page 118786 cell 4: Rowid 815704 out of order (previous was 816727)&lt;br /&gt;
Corruption detected in cell 0 on page 118786&lt;br /&gt;
Multiple uses for byte 132 of page 118786&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Datenbank-Dump erstellen (Export gesamten DB in die Datei &amp;quot;dump_all_20160516_1043.sql&amp;quot;) und DB verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .mode insert&lt;br /&gt;
sqlite&amp;gt; .output dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; .dump&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Neue Datenbank erstellen und den Dump einlesen, Integritäts-Check machen und verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem-neu.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .read dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; pragma integrity_check;&lt;br /&gt;
ok&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Spätestens jetzt fhem stoppen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem stop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Alte DB sichern und neue aktivieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv fhem.db fhem.db.sv_20160516&lt;br /&gt;
sudo mv fhem-neu.db fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Kontrollieren, dass die neue DB die gleichen Rechte wie die alte DB hat (und ggf. korrigieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 root root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
~/fhem$ sudo chown fhem:root fhem.db&lt;br /&gt;
&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 fhem root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fhem wieder starten (und natürlich kontrollieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nützliche Codeschnipsel ==&lt;br /&gt;
Anbei ein paar nützliche Codeschnipsel rund um DbLog&lt;br /&gt;
&lt;br /&gt;
=== Dateigrösse mitloggen ===&lt;br /&gt;
Da die Datenbank ins Unermessliche wachsen kann, empfiehlt es sich - je nach Speicherplatz - ab einer bestimmten Grösse tätig zu werden. Dazu muss diese Grösse allerdings ermittelt werden. Diese geschieht mittels des Userreadings, welches man vorteilshafterweise mit im DbLog-device anlegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;attr myDbLog userReadings DbFileSize:lastReduceLogResult.* { (split(&#039; &#039;,`du -m fhem.db`))[0] }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels dieses Attributs wird die Grösse der .db-Datei immer nach dem Ausführen des ReduceLog in das Reading &amp;quot;DbFileSize&amp;quot; in ganzzahligen MByte abgelegt.&lt;br /&gt;
&lt;br /&gt;
Basierend auf diesem Reading können dann weitere Aktionen, beispielsweise ein Plot, erstellt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Heizleistung_und_Gasverbrauch|Beispiel das DbLog-Daten für SVG-Plots verwendet]]&lt;br /&gt;
* [[SVG-Plots von FileLog auf DbLog umstellen]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=21548</id>
		<title>HM-ES-TX-WM Zählersensor für Strom- und Gaszähler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=21548"/>
		<updated>2017-05-14T14:11:43Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-EM-TX-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Zählersensor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Powersensor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=6 V&lt;br /&gt;
|HWPowerConsumption=30 mA&lt;br /&gt;
|HWPoweredBy=4 Batterien LR6/AA/Mignon&lt;br /&gt;
|HWSize=68x105x30mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der HM-ES-TX-WM ist eine Datenerfassungs- und Sendeeinheit, an die genau ein (separat zu erwerbender) Zählersensor für passende Strom-/Gaszähler angeschlossen wird, der den aktuellen Verbrauch direkt am jeweiligen Zähler erfasst und in FHEM als Momentanwerte und als laufenden Saldo verfügbar macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 195 g (inkl. 4 LR6/Mignon/AA-Batterien)&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
Mit den erfassten und gesammelten Daten lassen sich Aktionen beim Erreichen bestimmter Schwellwerte auslösen, Verbrauchs- und Kostenstatistiken erstellen sowie beliebige weitere Abhängigkeiten bilden. Durch die Funkdatenübertragung sowie den Batteriebetrieb (1 bis 2 Jahre Betriebsdauer verspricht der Hersteller mit einem Satz) ist die Installation denkbar einfach und erfordert lediglich beim Anbringen der Leseeinheit Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Im Februar 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen, zu dem es &lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-ferraris-zaehler-es-fer.html Ferraris-Sensor] (für Stromzähler mit den markanten Laufscheiben) (ca. 25€),&lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-led-es-led.html LED-Sensor] (für neue Zähler mit S0-Schnittstelle) (ca. 25€), sowie &lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-gas-es-gas.html BK-G4-Gaszähler] von Elster-Kromschröder (die an einer Ziffernrolle einen kleinen Magneten haben, der über einen Sensor mit Reedkontakt erfasst wird) (ca. 60€)&lt;br /&gt;
gibt. Es ist laut Hersteller ELV als [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html Bausatz] (ca. 45€) oder auch - deutlich teurer - [https://www.elv.de/homematic-komplettbausatz-zaehlersensor-sendeeinheit-strom-gas.html fertig montiert] (ca. 70€) verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die Zähler werden mit rückstandslos entfernbaren Klebepads angebracht.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &#039;&#039;&#039;list:        register | range              | peer     | description&#039;&#039;&#039; &lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central &lt;br /&gt;
   1: mtrConstGas      |   0 to 655.36      |          | constant gas &lt;br /&gt;
   1: mtrConstIr       |   0 to 65536       |          | constant IR &lt;br /&gt;
   1: mtrConstLed      |   0 to 65536       |          | constant led &lt;br /&gt;
   1: mtrSensIr        | -99 to 99          |          | sensiblity IR &lt;br /&gt;
   1: mtrType          |     literal        |          | type of measurement options:LED,gas,unknown,IR &lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
Der HM-ES-TX-WM sendet zyklisch im 3-Minuten Takt die aktuellen Verbrauchsdaten. Dabei ist für das Reading &amp;quot;power&amp;quot; (aktuelle Stromleistung in Watt) zu beachten, dass alle drei Minuten der &#039;&#039;zuletzt bekannte Wert&#039;&#039; gesendet wird. Das heißt im Besonderen:&lt;br /&gt;
&lt;br /&gt;
* Sollten innerhalb der drei Minuten mehrfach Impulse auftreten mit unterschiedlichen Leistungswerten, wird nur der zuletzt bekannte Wert genommen. Es findet keine Aggregation der Impulse (Mittelwert, Summe, …) statt.&lt;br /&gt;
* Sollten innerhalb der drei Minuten keinerlei Impulse auftreten, wird dennoch der zuletzt bekannte Leistungswert gesendet, auch wenn er mehrere Minuten/Stunden/Tage alt ist.&lt;br /&gt;
&lt;br /&gt;
Der state des Devices zeigt den letzten Übertragungsstatus an das Device, das Geräte unterstützt keinen Burst. D.h. einen an das Gerät abgesetzten Befehl z.B. getConfig oder einstellen von Zählerkonstanten sollte man möglichst am Geräte bestätigen, sonst könnte es sein, dass ein ACK zu spät zurück kommt und man sich anschließend im state über ein NACK wundert. &lt;br /&gt;
&lt;br /&gt;
Scheinbar gibt es für das reading energy bei 838860.7 einen Zählerüberlauf. {{Link2Forum|Topic=32827|Message=270012}}&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Sensor wird mit einem FHEM im Update-Stand vom (mindestens) 7.2.2015 funktionsfähig eingebunden (getestet in der Variante mit Ferraris-Fühler). Es werden der Fühlertyp und die Fühlerkonstante richtig ausgelesen und im Reading &#039;&#039;energy&#039;&#039; die errechnete Energiemenge ausgegeben (bei Strom: Wattstunden, Wh).&lt;br /&gt;
&lt;br /&gt;
Für die perfekte Konfiguration wird auf die Seite &amp;quot;[[Heizleistung und Gasverbrauch]]&amp;quot; verwiesen, wo eine vollständige Lösung für die Umrechnung von Gasverbrauch in kW/h, Graphen und Hilfsprogramme vorgestellt wird.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
 &#039;&#039;&#039;Reading:       |Beispiel&#039;&#039;&#039;   &lt;br /&gt;
 D-firmware     |1.0&lt;br /&gt;
 D-serialNr     |MEQ0025452 &lt;br /&gt;
 battery        |ok&lt;br /&gt;
 boot           |off &lt;br /&gt;
 current        |0 &lt;br /&gt;
 eState         |E: 6199.9 P: 1713 I: 0 U: 0 f: 50 &lt;br /&gt;
 energy         |6199.9 &lt;br /&gt;
 energyOffset   |84413.2&lt;br /&gt;
 frequency      |50 &lt;br /&gt;
 power          |1713 &lt;br /&gt;
 powerOn        |2015-03-26 14:57:48&lt;br /&gt;
 voltage        |0&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug ===&lt;br /&gt;
 &#039;&#039;&#039;Event     |Beispielswert&#039;&#039;&#039;&lt;br /&gt;
 battery*  |ok&lt;br /&gt;
 energy    |10186.6&lt;br /&gt;
 power     |283&lt;br /&gt;
 current   |0&lt;br /&gt;
 voltage   |0&lt;br /&gt;
 frequency |50&lt;br /&gt;
 eState    |E: 10186.6 P: 283 I: 0 U: 0 f: 50&lt;br /&gt;
 boot      |off&lt;br /&gt;
&lt;br /&gt;
Ein battery-Event wird nicht zyklisch getriggert. Erst wenn die Batterie tatsächlich leer ist, wird eine entsprechende Meldung vom Gerät selber gesendet und ein battery-Event getriggert (battery: low).&lt;br /&gt;
&lt;br /&gt;
Mit einem Userreading lässt sich die Angabe aus &#039;&#039;energy&#039;&#039; (zum Beispiel für einen Stromzähler (Wh)) in die auf dem Zähler übliche Angabe kWh umrechnen und zugleich mit dem Aufaddieren des Unterschieds beim Start (das Zählermodul beginnt ja mit 0 Wh, während der Zähler meist schon einige Jahre auf der &amp;quot;Rolle&amp;quot; hat) die Angaben gleichziehen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;DeviceName&amp;gt; userReadings kWh {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;lt;DeviceName&amp;gt;&amp;quot;,&amp;quot;energy&amp;quot;,&amp;quot;???&amp;quot;)/1000+72031.5639)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Nach dem Erkennen durch [[autocreate]] wird der Zählersensor mit diesen Angaben eingebunden:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 IODev CUL_0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actCycle 000:10&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actStatus alive&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 expert 2_full&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 firmware 1.0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 subType powerSensor&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594_IEC_01 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 icon measure_power&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 peerIDs &lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594_IEC_02 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_02 model HM-ES-TX-WM&lt;br /&gt;
&lt;br /&gt;
Die Übertragung der Messwerte erfolgt in Kanal 01 (hier: &amp;quot;CUL_HM_HM_ES_TX_WM_353594_IEC_01&amp;quot;). Für eine Darstellung als SVG-Plot können die Messwerte mittels folgender Anweisung in einer Datei abgespeichert werden.&lt;br /&gt;
&lt;br /&gt;
 define FileLog_CUL_HM_HM_ES_TX_WM_353594_IEC_01 FileLog ./log/Stromverbrauch-%Y-%m.log  CUL_HM_HM_ES_TX_WM_353594_IEC_01&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb mit den verschiedenen Zählern muß eines der Readings &#039;&#039;&#039;R-mtrConst&#039;&#039;&#039;XXX auf den jeweiligen verwendeten Zähler konfiguriert werden. Z.B. kann ein Ferraris-Stromzähler 100, 150 oder 200 Umdrehungen je kWh benötigen. Dies geschieht z.B. für 150 Meldungen je Einheit für einen Ferraris-Zähler mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstIr 150&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für einen Gaszähler auf der 1. Rolle (d.h. 1 Impuls je 0.1 m^3)&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstGas 0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In FHEM bis zum Anfang November 2015 war hier ein kleiner Bug enthalten, der diesen Wert nicht akzeptierte. In diesem Fall läßt sich die Anzahl der Impulse direkt am Gerät über das Display einstellen.&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
[[Datei:PlotStromverbrauchProStunde.png|mini|400px|rechts|Beispiel der graph. Darstellung]]&lt;br /&gt;
Der Zähler wird fortlaufend aufaddiert. Mit der delta-Funktion von SVG-Plot können die Verbräuche sehr gut visualisiert werden. &lt;br /&gt;
Beispiel Stromzähler:&lt;br /&gt;
&lt;br /&gt;
 set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
 set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
 set xdata time&lt;br /&gt;
 set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
 set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
 set title &#039;Stündlicher Stromverbrauch | aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh&#039;&lt;br /&gt;
 set ytics &lt;br /&gt;
 set y2tics &lt;br /&gt;
 set grid ytics&lt;br /&gt;
 set ylabel &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 set y2label &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 #FileLog 4:CUL_HM_HM_ES_TX_WM_353594.kWh\x3a:0:delta-h&lt;br /&gt;
 plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Line 1&#039; ls l0 lw 2 with bars&lt;br /&gt;
&lt;br /&gt;
== Wiki ToDo ==&lt;br /&gt;
Seit dem FHEM Update vom 06.03.2016 werden bei Neueinrichtung mit Autocreate 2 Kanäle angelegt. Dies entspricht der Firmware Revision 1.1:&lt;br /&gt;
* _IEC_01&lt;br /&gt;
Im Gas-Modus werden hier die Werte geliefert.&lt;br /&gt;
Im IR-Modus kommen seit R12555 vom 12.11.2016 hier die Zähl-Werte Energiewerte an, die auch im Status von IEC02 gezeigt werden.&lt;br /&gt;
state enthält dabei den Wert des readings energy. Möchte man hier z.B. die im letzten Zeitfenster gemessene Leistung anzeigen lassen, reading power, so hilft das Attribut stateformat&lt;br /&gt;
&amp;lt;code&amp;gt;{sprintf(&amp;quot;P: %.1f W&amp;quot;, ReadingsVal($name,&amp;quot;power&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* _IEC_02&lt;br /&gt;
&lt;br /&gt;
== Firmwareupdate ==&lt;br /&gt;
Das Gerät lässt sich in den Updatemodus versetzen, im dem die Batterien zunächst entfernt, dann beim Einsetzen die Anlerntaste (die rechte mit der Bezeichnung &amp;quot;&amp;gt;&amp;quot;) gedrückt bleibt. die Leuchtdiode blinkt dann rot im schnellen Takt. Das FHEM-Kommando zum Senden der Firmware per &amp;lt;code&amp;gt;set &amp;lt;devicename&amp;gt; fwUpdate &amp;lt;Firmwaredatei.eq3&amp;gt;&amp;lt;/code&amp;gt; muss vor dem Einlegen der Batterie (bei gleichzeitigem Drücken der Anlerntaste) aufgegeben  werden. Erfolgt zum Zeitpunkt des Anstartens im Updatemodus keine Sendung der Firmware wird der Zählersensor normal gebootet. Die Meldung &amp;lt;code&amp;gt; &amp;lt;devicename&amp;gt; fwUpdate: fail:notInBootLoader&amp;lt;/code&amp;gt; im Filelog erscheint, wenn das FHEM fwUpdate Kommando &#039;&#039;zu spät&#039;&#039; gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Der Update dauert etwa eine Minute. Während des Updates blinkt die Diode rot in kurzen Intervallen.&lt;br /&gt;
Nach erfolgreichen Update muss der Sensor auf die Werkseinstellungen zurückgesetzt (&amp;quot;&amp;gt;&amp;quot; Taste 4 Sekunden drücken (Display zeigt reS), kurz warten, &amp;quot;&amp;gt;&amp;quot; noch mal 4 Sekunden drücken - Zählersensor rebootet), aus der FHEM Konfiguration entfernt und neu angelernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Reset nicht durchgeführt wird, kommt vom Sensor immer die Fehlermeldung: einmal langes und drei mal kurzes rotes Blinken (Sitz des Auslesekopfes prüfen). Diese Meldung ist in diesem Zusammenhang ziemlich irreführend.&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang ist im changelog.txt file der Firmware unvollständig beschrieben, da hier ein Update an der CCU vorausgesetzt wird und die CCU die Firmware wohl automatisch sendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Handbuch [http://files.elv.de/Assets/Produkte/14/1401/140143/Downloads/140143_sensor_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html] &lt;br /&gt;
* Forum {{Link2Forum|Topic=32827|Message=252161}}&lt;br /&gt;
* Forum {{Link2Forum|Topic=30936|Message=234877}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=21540</id>
		<title>HM-ES-TX-WM Zählersensor für Strom- und Gaszähler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=21540"/>
		<updated>2017-05-13T08:32:58Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Beschreibung des Update-Prozess erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-EM-TX-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Zählersensor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Powersensor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=6 V&lt;br /&gt;
|HWPowerConsumption=30 mA&lt;br /&gt;
|HWPoweredBy=4 Batterien LR6/AA/Mignon&lt;br /&gt;
|HWSize=68x105x30mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der HM-ES-TX-WM ist eine Datenerfassungs- und Sendeeinheit, an die genau ein (separat zu erwerbender) Zählersensor für passende Strom-/Gaszähler angeschlossen wird, der den aktuellen Verbrauch direkt am jeweiligen Zähler erfasst und in FHEM als Momentanwerte und als laufenden Saldo verfügbar macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 195 g (inkl. 4 LR6/Mignon/AA-Batterien)&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
Mit den erfassten und gesammelten Daten lassen sich Aktionen beim Erreichen bestimmter Schwellwerte auslösen, Verbrauchs- und Kostenstatistiken erstellen sowie beliebige weitere Abhängigkeiten bilden. Durch die Funkdatenübertragung sowie den Batteriebetrieb (1 bis 2 Jahre Betriebsdauer verspricht der Hersteller mit einem Satz) ist die Installation denkbar einfach und erfordert lediglich beim Anbringen der Leseeinheit Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Im Februar 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen, zu dem es &lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-ferraris-zaehler-es-fer.html Ferraris-Sensor] (für Stromzähler mit den markanten Laufscheiben) (ca. 25€),&lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-led-es-led.html LED-Sensor] (für neue Zähler mit S0-Schnittstelle) (ca. 25€), sowie &lt;br /&gt;
* einen [https://www.elv.de/homematic-zaehlersensor-gas-es-gas.html BK-G4-Gaszähler] von Elster-Kromschröder (die an einer Ziffernrolle einen kleinen Magneten haben, der über einen Sensor mit Reedkontakt erfasst wird) (ca. 60€)&lt;br /&gt;
gibt. Es ist laut Hersteller ELV als [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html Bausatz] (ca. 45€) oder auch - deutlich teurer - [https://www.elv.de/homematic-komplettbausatz-zaehlersensor-sendeeinheit-strom-gas.html fertig montiert] (ca. 70€) verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die Zähler werden mit rückstandslos entfernbaren Klebepads angebracht.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &#039;&#039;&#039;list:        register | range              | peer     | description&#039;&#039;&#039; &lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central &lt;br /&gt;
   1: mtrConstGas      |   0 to 655.36      |          | constant gas &lt;br /&gt;
   1: mtrConstIr       |   0 to 65536       |          | constant IR &lt;br /&gt;
   1: mtrConstLed      |   0 to 65536       |          | constant led &lt;br /&gt;
   1: mtrSensIr        | -99 to 99          |          | sensiblity IR &lt;br /&gt;
   1: mtrType          |     literal        |          | type of measurement options:LED,gas,unknown,IR &lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
Der HM-ES-TX-WM sendet zyklisch im 3-Minuten Takt die aktuellen Verbrauchsdaten. Dabei ist für das Reading &amp;quot;power&amp;quot; (aktuelle Stromleistung in Watt) zu beachten, dass alle drei Minuten der &#039;&#039;zuletzt bekannte Wert&#039;&#039; gesendet wird. Das heißt im Besonderen:&lt;br /&gt;
&lt;br /&gt;
* Sollten innerhalb der drei Minuten mehrfach Impulse auftreten mit unterschiedlichen Leistungswerten, wird nur der zuletzt bekannte Wert genommen. Es findet keine Aggregation der Impulse (Mittelwert, Summe, …) statt.&lt;br /&gt;
* Sollten innerhalb der drei Minuten keinerlei Impulse auftreten, wird dennoch der zuletzt bekannte Leistungswert gesendet, auch wenn er mehrere Minuten/Stunden/Tage alt ist.&lt;br /&gt;
&lt;br /&gt;
Der state des Devices zeigt den letzten Übertragungsstatus an das Device, das Geräte unterstützt keinen Burst. D.h. einen an das Gerät abgesetzten Befehl z.B. getConfig oder einstellen von Zählerkonstanten sollte man möglichst am Geräte bestätigen, sonst könnte es sein, dass ein ACK zu spät zurück kommt und man sich anschließend im state über ein NACK wundert. &lt;br /&gt;
&lt;br /&gt;
Scheinbar gibt es für das reading energy bei 838860.7 einen Zählerüberlauf. {{Link2Forum|Topic=32827|Message=270012}}&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Sensor wird mit einem FHEM im Update-Stand vom (mindestens) 7.2.2015 funktionsfähig eingebunden (getestet in der Variante mit Ferraris-Fühler). Es werden der Fühlertyp und die Fühlerkonstante richtig ausgelesen und im Reading &#039;&#039;energy&#039;&#039; die errechnete Energiemenge ausgegeben (bei Strom: Wattstunden, Wh).&lt;br /&gt;
&lt;br /&gt;
Für die perfekte Konfiguration wird auf die Seite &amp;quot;[[Heizleistung und Gasverbrauch]]&amp;quot; verwiesen, wo eine vollständige Lösung für die Umrechnung von Gasverbrauch in kW/h, Graphen und Hilfsprogramme vorgestellt wird.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
 &#039;&#039;&#039;Reading:       |Beispiel&#039;&#039;&#039;   &lt;br /&gt;
 D-firmware     |1.0&lt;br /&gt;
 D-serialNr     |MEQ0025452 &lt;br /&gt;
 battery        |ok&lt;br /&gt;
 boot           |off &lt;br /&gt;
 current        |0 &lt;br /&gt;
 eState         |E: 6199.9 P: 1713 I: 0 U: 0 f: 50 &lt;br /&gt;
 energy         |6199.9 &lt;br /&gt;
 energyOffset   |84413.2&lt;br /&gt;
 frequency      |50 &lt;br /&gt;
 power          |1713 &lt;br /&gt;
 powerOn        |2015-03-26 14:57:48&lt;br /&gt;
 voltage        |0&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug ===&lt;br /&gt;
 &#039;&#039;&#039;Event     |Beispielswert&#039;&#039;&#039;&lt;br /&gt;
 battery*  |ok&lt;br /&gt;
 energy    |10186.6&lt;br /&gt;
 power     |283&lt;br /&gt;
 current   |0&lt;br /&gt;
 voltage   |0&lt;br /&gt;
 frequency |50&lt;br /&gt;
 eState    |E: 10186.6 P: 283 I: 0 U: 0 f: 50&lt;br /&gt;
 boot      |off&lt;br /&gt;
&lt;br /&gt;
Ein battery-Event wird nicht zyklisch getriggert. Erst wenn die Batterie tatsächlich leer ist, wird eine entsprechende Meldung vom Gerät selber gesendet und ein battery-Event getriggert (battery: low).&lt;br /&gt;
&lt;br /&gt;
Mit einem Userreading lässt sich die Angabe aus &#039;&#039;energy&#039;&#039; (zum Beispiel für einen Stromzähler (Wh)) in die auf dem Zähler übliche Angabe kWh umrechnen und zugleich mit dem Aufaddieren des Unterschieds beim Start (das Zählermodul beginnt ja mit 0 Wh, während der Zähler meist schon einige Jahre auf der &amp;quot;Rolle&amp;quot; hat) die Angaben gleichziehen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;DeviceName&amp;gt; userReadings kWh {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;lt;DeviceName&amp;gt;&amp;quot;,&amp;quot;energy&amp;quot;,&amp;quot;???&amp;quot;)/1000+72031.5639)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Nach dem Erkennen durch [[autocreate]] wird der Zählersensor mit diesen Angaben eingebunden:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 IODev CUL_0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actCycle 000:10&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actStatus alive&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 expert 2_full&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 firmware 1.0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 subType powerSensor&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594_IEC_01 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 icon measure_power&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_01 peerIDs &lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594_IEC_02 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594_IEC_02 model HM-ES-TX-WM&lt;br /&gt;
&lt;br /&gt;
Die Übertragung der Messwerte erfolgt in Kanal 01 (hier: &amp;quot;CUL_HM_HM_ES_TX_WM_353594_IEC_01&amp;quot;). Für eine Darstellung als SVG-Plot können die Messwerte mittels folgender Anweisung in einer Datei abgespeichert werden.&lt;br /&gt;
&lt;br /&gt;
 define FileLog_CUL_HM_HM_ES_TX_WM_353594_IEC_01 FileLog ./log/Stromverbrauch-%Y-%m.log  CUL_HM_HM_ES_TX_WM_353594_IEC_01&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb mit den verschiedenen Zählern muß eines der Readings &#039;&#039;&#039;R-mtrConst&#039;&#039;&#039;XXX auf den jeweiligen verwendeten Zähler konfiguriert werden. Z.B. kann ein Ferraris-Stromzähler 100, 150 oder 200 Umdrehungen je kWh benötigen. Dies geschieht z.B. für 150 Meldungen je Einheit für einen Ferraris-Zähler mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstIr 150&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für einen Gaszähler auf der 1. Rolle (d.h. 1 Impuls je 0.1 m^3)&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstGas 0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In FHEM bis zum Anfang November 2015 war hier ein kleiner Bug enthalten, der diesen Wert nicht akzeptierte. In diesem Fall läßt sich die Anzahl der Impulse direkt am Gerät über das Display einstellen.&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
[[Datei:PlotStromverbrauchProStunde.png|mini|400px|rechts|Beispiel der graph. Darstellung]]&lt;br /&gt;
Der Zähler wird fortlaufend aufaddiert. Mit der delta-Funktion von SVG-Plot können die Verbräuche sehr gut visualisiert werden. &lt;br /&gt;
Beispiel Stromzähler:&lt;br /&gt;
&lt;br /&gt;
 set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
 set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
 set xdata time&lt;br /&gt;
 set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
 set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
 set title &#039;Stündlicher Stromverbrauch | aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh&#039;&lt;br /&gt;
 set ytics &lt;br /&gt;
 set y2tics &lt;br /&gt;
 set grid ytics&lt;br /&gt;
 set ylabel &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 set y2label &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 #FileLog 4:CUL_HM_HM_ES_TX_WM_353594.kWh\x3a:0:delta-h&lt;br /&gt;
 plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Line 1&#039; ls l0 lw 2 with bars&lt;br /&gt;
&lt;br /&gt;
== Wiki ToDo ==&lt;br /&gt;
Seit dem FHEM Update vom 06.03.2016 werden bei Neueinrichtung mit Autocreate 2 Kanäle angelegt. Dies entspricht der Firmware Revision 1.1:&lt;br /&gt;
* _IEC_01&lt;br /&gt;
Im Gas-Modus werden hier die Werte geliefert.&lt;br /&gt;
Im IR-Modus kommen seit R12555 vom 12.11.2016 hier die Zähl-Werte Energiewerte an, die auch im Status von IEC02 gezeigt werden.&lt;br /&gt;
state enthält dabei den Wert des readings energy. Möchte man hier z.B. die im letzten Zeitfenster gemessene Leistung anzeigen lassen, reading power, so hilft das Attribut stateformat&lt;br /&gt;
&amp;lt;code&amp;gt;{sprintf(&amp;quot;P: %.1f W&amp;quot;, ReadingsVal($name,&amp;quot;power&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* _IEC_02&lt;br /&gt;
&lt;br /&gt;
== Firmwareupdate ==&lt;br /&gt;
Das Gerät lässt sich in den Updatemodus versetzen, im dem die Batterien zunächst entfernt, dann beim Einsetzen die Anlerntaste (die rechte mit der Bezeichnung &amp;quot;&amp;gt;&amp;quot;) gedrückt bleibt. die Leuchtdiode blinkt dann rot im schnellen Takt. Das FHEM-Kommando zum Senden der Firmware per &amp;lt;code&amp;gt;set &amp;lt;devicename&amp;gt; fwUpdate &amp;lt;Firmwaredatei.eq3&amp;gt;&amp;lt;/code&amp;gt; muss vor dem Einlegen der Batterie (bei gleichzeitigem Drücken der Anlerntaste) aufgegeben  werden. Erfolgt zum Zeitpunkt des Anstartens im Updatemodus keine Sendung der Firmware wird der Zählersensor normal gebootet. Die Meldung &amp;lt;code&amp;gt; &amp;lt;devicename&amp;gt; fwUpdate: fail:notInBootLoader&amp;lt;/code&amp;gt; im Filelog erscheint, wenn das FHEM fwUpdate Kommando &#039;&#039;zu spät&#039;&#039; gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Tipp: Da Einlegen von Batterie, Drücken der Anlerntaste schon zwei von zwei Händen belegt, kann man mit einem kleinen AT alle Sekunde die Firmwareupdate auslösen (die im fhem-Verzeichnis liegen sollte). Die Definition dafür:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code&amp;gt;+*00:00:01 set [Name des Zählers] fwUpdate HM-ES-TX-WM_update_V1_2_160628.eq3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Update dauert etwa eine Minute. Während des Updates blinkt die Diode rot in kurzen Intervallen.&lt;br /&gt;
Nach erfolgreichen Update muss der Sensor auf die Werkseinstellungen zurückgesetzt (&amp;quot;&amp;gt;&amp;quot; Taste 4 Sekunden drücken (Display zeigt reS), kurz warten, &amp;quot;&amp;gt;&amp;quot; noch mal 4 Sekunden drücken - Zählersensor rebootet), aus der FHEM Konfiguration entfernt und neu angelernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Reset nicht durchgeführt wird, kommt vom Sensor immer die Fehlermeldung: einmal langes und drei mal kurzes rotes Blinken (Sitz des Auslesekopfes prüfen). Diese Meldung ist in diesem Zusammenhang ziemlich irreführend.&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang ist im changelog.txt file der Firmware unvollständig beschrieben, da hier ein Update an der CCU vorausgesetzt wird und die CCU die Firmware wohl automatisch sendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Handbuch [http://files.elv.de/Assets/Produkte/14/1401/140143/Downloads/140143_sensor_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html] &lt;br /&gt;
* Forum {{Link2Forum|Topic=32827|Message=252161}}&lt;br /&gt;
* Forum {{Link2Forum|Topic=30936|Message=234877}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Delete&amp;diff=17699</id>
		<title>Delete</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Delete&amp;diff=17699"/>
		<updated>2016-12-08T18:52:10Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Schreibweise von deleteReading korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:delete}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Befehl zum Löschen von Gerätedefinitionen&lt;br /&gt;
|ModType=cmd&lt;br /&gt;
|ModCmdRef=delete&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=fhem.pl (&amp;quot;Built-in&amp;quot;)&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
Der Befehl [[delete]] dient dazu, Geräte (Devices) aus der Fhem-[[Konfiguration]] zu löschen. &lt;br /&gt;
&lt;br /&gt;
Der Befehl kann direkt über die [[FHEMWEB|Weboberfläche]] eingegeben werden.&lt;br /&gt;
&lt;br /&gt;
Sollen nur Teile eines Gerätes gelöscht werden, stehen dafür dir Befehle &#039;&#039;deleteattr&#039;&#039; (löschen von Attributen) und &#039;&#039;deleteReading&#039;&#039; (löschen von Readings) zur Verfügung.&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17550</id>
		<title>HM-ES-TX-WM Zählersensor für Strom- und Gaszähler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17550"/>
		<updated>2016-11-28T07:12:14Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: neuerliche Korrektur Zuordnung Channels nach neuerlicher Änderung von CUL_HM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-EM-TX-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Zählersensor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Powersensor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=6 V&lt;br /&gt;
|HWPowerConsumption=30 mA&lt;br /&gt;
|HWPoweredBy=4 Batterien LR6/AA/Mignon&lt;br /&gt;
|HWSize=68x105x30mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Zählersensor ist ein Datenerfassungssystem, das den Energieverbräuche (Strom, Gas) direkt am Zähler erfasst und in FHEM als laufender Saldo und als Momentanwerte verfügbar macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 195 g (inkl. 4 LR6/Mignon/AA-Batterien)&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
Mit den erfassten und gesammelten Daten lassen sich Aktionen beim Erreichen bestimmter Schwellwerte auslösen, Verbrauchs- und Kostenstatistiken erstellen sowie beliebige weitere Abhängigkeiten bilden. Durch die Funkdatenübertragung sowie den Batteriebetrieb (1 bis 2 Jahre Betriebsdauer verspricht der Hersteller mit einem Satz) ist die Installation denkbar einfach und erfordert lediglich beim Anbringen der Leseeinheit Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Im Februar 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen, zu dem es &lt;br /&gt;
* einen Ferraris-Sensor (für Stromzähler mit den markanten Laufscheiben),&lt;br /&gt;
* LED-Sensor (für neue Zähler mit S0-Schnittstelle) sowie &lt;br /&gt;
* BK-G4-Gaszähler von Elster-Kromschröder (die an einer Ziffernrolle einen kleinen Magneten haben, der über einen Sensor mit Reedkontakt erfasst wird)&lt;br /&gt;
gibt. Es ist laut Hersteller [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html ELV] nur der Bausatz verfügbar. Ein Fertiggerät ist aktuell nicht geplant.&lt;br /&gt;
&lt;br /&gt;
Die Zähler werden mit rückstandslos entfernbaren Klebepads angebracht.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &#039;&#039;&#039;list:        register | range              | peer     | description&#039;&#039;&#039; &lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central &lt;br /&gt;
   1: mtrConstGas      |   0 to 655.36      |          | constant gas &lt;br /&gt;
   1: mtrConstIr       |   0 to 65536       |          | constant IR &lt;br /&gt;
   1: mtrConstLed      |   0 to 65536       |          | constant led &lt;br /&gt;
   1: mtrSensIr        | -99 to 99          |          | sensiblity IR &lt;br /&gt;
   1: mtrType          |     literal        |          | type of measurement options:LED,gas,unknown,IR &lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
Der HM-ES-TX-WM sendet zyklisch im 3-Minuten Takt die aktuellen Verbrauchsdaten. Dabei ist für das Reading &amp;quot;power&amp;quot; (aktuelle Stromleistung in Watt) zu beachten, dass alle drei Minuten der &#039;&#039;zuletzt bekannte Wert&#039;&#039; gesendet wird. Das heißt im Besonderen:&lt;br /&gt;
&lt;br /&gt;
* Sollten innerhalb der drei Minuten mehrfach Impulse auftreten mit unterschiedlichen Leistungswerten, wird nur der zuletzt bekannte Wert genommen. Es findet keine Aggregation der Impulse (Mittelwert, Summe, …) statt.&lt;br /&gt;
* Sollten innerhalb der drei Minuten keinerlei Impulse auftreten, wird dennoch der zuletzt bekannte Leistungswert gesendet, auch wenn er mehrere Minuten/Stunden/Tage alt ist.&lt;br /&gt;
&lt;br /&gt;
Der state des Devices zeigt den letzten Übertragungsstatus an das Device, das Geräte unterstützt keinen Burst. D.h. einen an das Gerät abgesetzten Befehl z.B. getConfig oder einstellen von Zählerkonstanten sollte man möglichst am Geräte bestätigen, sonst könnte es sein, dass ein ACK zu spät zurück kommt und man sich anschließend im state über ein NACK wundert. &lt;br /&gt;
&lt;br /&gt;
Scheinbar gibt es für das reading energy bei 838860.7 einen Zählerüberlauf. [http://forum.fhem.de/index.php/topic,32827.msg270012.html#msg270012]&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Sensor wird mit einem FHEM im Update-Stand vom (mindestens) 7.2.2015 funktionsfähig eingebunden (getestet in der Variante mit Ferraris-Fühler). Es werden der Fühlertyp und die Fühlerkonstante richtig ausgelesen und im Reading &#039;&#039;energy&#039;&#039; die errechnete Energiemenge ausgegeben (bei Strom: Wattstunden, Wh).&lt;br /&gt;
&lt;br /&gt;
Für die perfekte Konfiguration wird auf die Seite &amp;quot;[[Heizleistung und Gasverbrauch]]&amp;quot; verwiesen, wo eine vollständige Lösung für die Umrechnung von Gasverbrauch in kW/h, Graphen und Hilfsprogramme vorgestellt wird.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
 &#039;&#039;&#039;Reading:       |Beispiel&#039;&#039;&#039;   &lt;br /&gt;
 D-firmware     |1.0&lt;br /&gt;
 D-serialNr     |MEQ0025452 &lt;br /&gt;
 battery        |ok&lt;br /&gt;
 boot           |off &lt;br /&gt;
 current        |0 &lt;br /&gt;
 eState         |E: 6199.9 P: 1713 I: 0 U: 0 f: 50 &lt;br /&gt;
 energy         |6199.9 &lt;br /&gt;
 energyOffset   |84413.2&lt;br /&gt;
 frequency      |50 &lt;br /&gt;
 power          |1713 &lt;br /&gt;
 powerOn        |2015-03-26 14:57:48&lt;br /&gt;
 voltage        |0&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug ===&lt;br /&gt;
 &#039;&#039;&#039;Event     |Beispielswert&#039;&#039;&#039;&lt;br /&gt;
 battery*  |ok&lt;br /&gt;
 energy    |10186.6&lt;br /&gt;
 power     |283&lt;br /&gt;
 current   |0&lt;br /&gt;
 voltage   |0&lt;br /&gt;
 frequency |50&lt;br /&gt;
 eState    |E: 10186.6 P: 283 I: 0 U: 0 f: 50&lt;br /&gt;
 boot      |off&lt;br /&gt;
&lt;br /&gt;
Ein battery-Event wird nicht zyklisch getriggert. Erst wenn die Batterie tatsächlich leer ist, wird eine entsprechende Meldung vom Gerät selber gesendet und ein battery-Event getriggert (battery: low).&lt;br /&gt;
&lt;br /&gt;
Mit einem Userreading lässt sich die Angabe aus &#039;&#039;energy&#039;&#039; (zum Beispiel für einen Stromzähler (Wh)) in die auf dem Zähler übliche Angabe kWh umrechnen und zugleich mit dem Aufaddieren des Unterschieds beim Start (das Zählermodul beginnt ja mit 0 Wh, während der Zähler meist schon einige Jahre auf der &amp;quot;Rolle&amp;quot; hat) die Angaben gleichziehen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;DeviceName&amp;gt; userReadings kWh {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;lt;DeviceName&amp;gt;&amp;quot;,&amp;quot;energy&amp;quot;,&amp;quot;???&amp;quot;)/1000+72031.5639)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Nach dem Erkennen durch [[autocreate]] wird der Zählersensor mit diesen Angaben eingebunden:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 IODev CUL_0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actCycle 000:10&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actStatus alive&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 expert 2_full&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 firmware 1.0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 subType powerSensor&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb mit den verschiedenen Zählern muß eines der Readings &#039;&#039;&#039;R-mtrConst&#039;&#039;&#039;XXX auf den jeweiligen verwendeten Zähler konfiguriert werden. Z.B. kann ein Ferraris-Stromzähler 100, 150 oder 200 Umdrehungen je kWh benötigen. Dies geschieht z.B. für 150 Meldungen je Einheit für einen Ferraris-Zähler mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstIr 150&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für einen Gaszähler auf der 1. Rolle (d.h. 1 Impuls je 0.1 m^3)&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstGas 0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Fhem bis zum Anfang November 2015 war hier ein kleiner Bug enthalten, der diesen Wert nicht akzeptierte. In diesem Fall läßt sich die Anzahl der Impulse direkt am Gerät über das Display einstellen.&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
[[Datei:PlotStromverbrauchProStunde.png|mini|400px|rechts|Beispiel der graph. Darstellung]]&lt;br /&gt;
Der Zähler wird fortlaufend aufaddiert. Mit der delta-Funktion von SVG-Plot können die Verbräuche sehr gut visualisiert werden. &lt;br /&gt;
Beispiel Stromzähler:&lt;br /&gt;
&lt;br /&gt;
 set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
 set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
 set xdata time&lt;br /&gt;
 set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
 set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
 set title &#039;Stündlicher Stromverbrauch | aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh&#039;&lt;br /&gt;
 set ytics &lt;br /&gt;
 set y2tics &lt;br /&gt;
 set grid ytics&lt;br /&gt;
 set ylabel &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 set y2label &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 #FileLog 4:CUL_HM_HM_ES_TX_WM_353594.kWh\x3a:0:delta-h&lt;br /&gt;
 plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Line 1&#039; ls l0 lw 2 with bars&lt;br /&gt;
&lt;br /&gt;
== Wiki ToDo ==&lt;br /&gt;
Seit dem FHEM Update vom 06.03.2016 werden bei Neueinrichtung mit Autocreate 2 Kanäle angelegt. Dies entspricht der Firmware Revision 1.1:&lt;br /&gt;
* _IEC_01&lt;br /&gt;
Im Gas-Modus werden hier die Werte geliefert.&lt;br /&gt;
Im IR-Modus kommen seit R12555 vom 12.11.2016 hier die Zähl-Werte Energiewerte an, die auch im Status von IEC02 gezeigt werden.&lt;br /&gt;
state enthält dabei den Wert des readings energy. Möchte man hier z.B. die im letzten Zeitfenster gemessene Leistung anzeigen lassen, reading power, so hilft das Attribut stateformat&lt;br /&gt;
&amp;lt;code&amp;gt;{sprintf(&amp;quot;P: %.1f W&amp;quot;, ReadingsVal($name,&amp;quot;power&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* _IEC_02&lt;br /&gt;
&lt;br /&gt;
== Firmwareupdate ==&lt;br /&gt;
Das Gerät lässt sich in den Updatemodus versetzen, im dem die Batterien zunächst entfernt, dann beim Einsetzen die Anlerntaste gedrückt bleibt. die Leuchtdiode blinkt dann rot im schnellen Takt. Das FHEM-Kommando zum Senden der Firmware per &amp;lt;code&amp;gt;set &amp;lt;devicename&amp;gt; fwUpdate &amp;lt;Firmwaredatei.eq3&amp;gt;&amp;lt;/code&amp;gt; muss vor dem Einlegen der Batterie (+ &amp;quot;&amp;gt;&amp;quot; Taste) aufgegeben  werden. Erfolgt zum Zeitpunkt des Anstartens im Updatemodus keine Sendung der Firmware wird der Zählersensor normal gebootet. Die Meldung &amp;lt;code&amp;gt; &amp;lt;devicename&amp;gt; fwUpdate: fail:notInBootLoader&amp;lt;/code&amp;gt; im Filelog erscheint, wenn das FHEM fwUpdate Kommando &#039;&#039;zu spät&#039;&#039; gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Der Update dauert etwa eine Minute. Während des Updates blinkt die Diode rot in kurzen Intervallen.&lt;br /&gt;
Nach erfolgreichen Update muss der Sensor auf die Werkseinstellungen zurückgesetzt (&amp;quot;&amp;gt;&amp;quot; Taste 4 Sekunden drücken (Display zeigt reS), kurz warten, &amp;quot;&amp;gt;&amp;quot; noch mal 4 Sekunden drücken - Zählersensor rebootet), aus der FHEM Konfiguration entfernt und neu angelernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Reset nicht durchgeführt wird, kommt vom Sensor immer die Fehlermeldung: einmal langes und drei mal kurzes rotes Blinken (Sitz des Auslesekopfes prüfen). Diese Meldung ist in diesem Zusammenhang ziemlich irreführend.&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang ist im changelog.txt file der Firmware unvollständig beschrieben, da hier ein Update an der CCU vorausgesetzt wird und die CCU die Firmware wohl automatisch sendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Handbuch [http://files.elv.de/Assets/Produkte/14/1401/140143/Downloads/140143_sensor_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html] &lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,32827.msg252161.html#msg252161]&lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,30936.msg234877.html#msg234877]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17434</id>
		<title>HM-ES-TX-WM Zählersensor für Strom- und Gaszähler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17434"/>
		<updated>2016-11-21T18:52:13Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-EM-TX-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Zählersensor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Powersensor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=6 V&lt;br /&gt;
|HWPowerConsumption=30 mA&lt;br /&gt;
|HWPoweredBy=4 Batterien LR6/AA/Mignon&lt;br /&gt;
|HWSize=68x105x30mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Zählersensor ist ein Datenerfassungssystem, das den Energieverbräuche (Strom, Gas) direkt am Zähler erfasst und in FHEM als laufender Saldo und als Momentanwerte verfügbar macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 195 g (inkl. 4 LR6/Mignon/AA-Batterien)&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
Mit den erfassten und gesammelten Daten lassen sich Aktionen beim Erreichen bestimmter Schwellwerte auslösen, Verbrauchs- und Kostenstatistiken erstellen sowie beliebige weitere Abhängigkeiten bilden. Durch die Funkdatenübertragung sowie den Batteriebetrieb (1 bis 2 Jahre Betriebsdauer verspricht der Hersteller mit einem Satz) ist die Installation denkbar einfach und erfordert lediglich beim Anbringen der Leseeinheit Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Im Februar 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen, zu dem es &lt;br /&gt;
* einen Ferraris-Sensor (für Stromzähler mit den markanten Laufscheiben),&lt;br /&gt;
* LED-Sensor (für neue Zähler mit S0-Schnittstelle) sowie &lt;br /&gt;
* BK-G4-Gaszähler von Elster-Kromschröder (die an einer Ziffernrolle einen kleinen Magneten haben, der über einen Sensor mit Reedkontakt erfasst wird)&lt;br /&gt;
gibt. Es ist laut Hersteller [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html ELV] nur der Bausatz verfügbar. Ein Fertiggerät ist aktuell nicht geplant.&lt;br /&gt;
&lt;br /&gt;
Die Zähler werden mit rückstandslos entfernbaren Klebepads angebracht.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &#039;&#039;&#039;list:        register | range              | peer     | description&#039;&#039;&#039; &lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central &lt;br /&gt;
   1: mtrConstGas      |   0 to 655.36      |          | constant gas &lt;br /&gt;
   1: mtrConstIr       |   0 to 65536       |          | constant IR &lt;br /&gt;
   1: mtrConstLed      |   0 to 65536       |          | constant led &lt;br /&gt;
   1: mtrSensIr        | -99 to 99          |          | sensiblity IR &lt;br /&gt;
   1: mtrType          |     literal        |          | type of measurement options:LED,gas,unknown,IR &lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
Der HM-ES-TX-WM sendet zyklisch im 3-Minuten Takt die aktuellen Verbrauchsdaten. Dabei ist für das Reading &amp;quot;power&amp;quot; (aktuelle Stromleistung in Watt) zu beachten, dass alle drei Minuten der &#039;&#039;zuletzt bekannte Wert&#039;&#039; gesendet wird. Das heißt im Besonderen:&lt;br /&gt;
&lt;br /&gt;
* Sollten innerhalb der drei Minuten mehrfach Impulse auftreten mit unterschiedlichen Leistungswerten, wird nur der zuletzt bekannte Wert genommen. Es findet keine Aggregation der Impulse (Mittelwert, Summe, …) statt.&lt;br /&gt;
* Sollten innerhalb der drei Minuten keinerlei Impulse auftreten, wird dennoch der zuletzt bekannte Leistungswert gesendet, auch wenn er mehrere Minuten/Stunden/Tage alt ist.&lt;br /&gt;
&lt;br /&gt;
Der state des Devices zeigt den letzten Übertragungsstatus an das Device, das Geräte unterstützt keinen Burst. D.h. einen an das Gerät abgesetzten Befehl z.B. getConfig oder einstellen von Zählerkonstanten sollte man möglichst am Geräte bestätigen, sonst könnte es sein, dass ein ACK zu spät zurück kommt und man sich anschließend im state über ein NACK wundert. &lt;br /&gt;
&lt;br /&gt;
Scheinbar gibt es für das reading energy bei 838860.7 einen Zählerüberlauf. [http://forum.fhem.de/index.php/topic,32827.msg270012.html#msg270012]&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Sensor wird mit einem FHEM im Update-Stand vom (mindestens) 7.2.2015 funktionsfähig eingebunden (getestet in der Variante mit Ferraris-Fühler). Es werden der Fühlertyp und die Fühlerkonstante richtig ausgelesen und im Reading &#039;&#039;energy&#039;&#039; die errechnete Energiemenge ausgegeben (bei Strom: Wattstunden, Wh).&lt;br /&gt;
&lt;br /&gt;
Für die perfekte Konfiguration wird auf die Seite &amp;quot;[[Heizleistung und Gasverbrauch]]&amp;quot; verwiesen, wo eine vollständige Lösung für die Umrechnung von Gasverbrauch in kW/h, Graphen und Hilfsprogramme vorgestellt wird.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
 &#039;&#039;&#039;Reading:       |Beispiel&#039;&#039;&#039;   &lt;br /&gt;
 D-firmware     |1.0&lt;br /&gt;
 D-serialNr     |MEQ0025452 &lt;br /&gt;
 battery        |ok&lt;br /&gt;
 boot           |off &lt;br /&gt;
 current        |0 &lt;br /&gt;
 eState         |E: 6199.9 P: 1713 I: 0 U: 0 f: 50 &lt;br /&gt;
 energy         |6199.9 &lt;br /&gt;
 energyOffset   |84413.2&lt;br /&gt;
 frequency      |50 &lt;br /&gt;
 power          |1713 &lt;br /&gt;
 powerOn        |2015-03-26 14:57:48&lt;br /&gt;
 voltage        |0&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug ===&lt;br /&gt;
 &#039;&#039;&#039;Event     |Beispielswert&#039;&#039;&#039;&lt;br /&gt;
 battery*  |ok&lt;br /&gt;
 energy    |10186.6&lt;br /&gt;
 power     |283&lt;br /&gt;
 current   |0&lt;br /&gt;
 voltage   |0&lt;br /&gt;
 frequency |50&lt;br /&gt;
 eState    |E: 10186.6 P: 283 I: 0 U: 0 f: 50&lt;br /&gt;
 boot      |off&lt;br /&gt;
&lt;br /&gt;
Ein battery-Event wird nicht zyklisch getriggert. Erst wenn die Batterie tatsächlich leer ist, wird eine entsprechende Meldung vom Gerät selber gesendet und ein battery-Event getriggert (battery: low).&lt;br /&gt;
&lt;br /&gt;
Mit einem Userreading lässt sich die Angabe aus &#039;&#039;energy&#039;&#039; (zum Beispiel für einen Stromzähler (Wh)) in die auf dem Zähler übliche Angabe kWh umrechnen und zugleich mit dem Aufaddieren des Unterschieds beim Start (das Zählermodul beginnt ja mit 0 Wh, während der Zähler meist schon einige Jahre auf der &amp;quot;Rolle&amp;quot; hat) die Angaben gleichziehen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;DeviceName&amp;gt; userReadings kWh {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;lt;DeviceName&amp;gt;&amp;quot;,&amp;quot;energy&amp;quot;,&amp;quot;???&amp;quot;)/1000+72031.5639)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Nach dem Erkennen durch [[autocreate]] wird der Zählersensor mit diesen Angaben eingebunden:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 IODev CUL_0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actCycle 000:10&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actStatus alive&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 expert 2_full&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 firmware 1.0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 subType powerSensor&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb mit den verschiedenen Zählern muß eines der Readings &#039;&#039;&#039;R-mtrConst&#039;&#039;&#039;XXX auf den jeweiligen verwendeten Zähler konfiguriert werden. Z.B. kann ein Ferraris-Stromzähler 100, 150 oder 200 Umdrehungen je kWh benötigen. Dies geschieht z.B. für 150 Meldungen je Einheit für einen Ferraris-Zähler mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstIr 150&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für einen Gaszähler auf der 1. Rolle (d.h. 1 Impuls je 0.1 m^3)&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstGas 0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Fhem bis zum Anfang November 2015 war hier ein kleiner Bug enthalten, der diesen Wert nicht akzeptierte. In diesem Fall läßt sich die Anzahl der Impulse direkt am Gerät über das Display einstellen.&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
[[Datei:PlotStromverbrauchProStunde.png|mini|400px|rechts|Beispiel der graph. Darstellung]]&lt;br /&gt;
Der Zähler wird fortlaufend aufaddiert. Mit der delta-Funktion von SVG-Plot können die Verbräuche sehr gut visualisiert werden. &lt;br /&gt;
Beispiel Stromzähler:&lt;br /&gt;
&lt;br /&gt;
 set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
 set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
 set xdata time&lt;br /&gt;
 set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
 set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
 set title &#039;Stündlicher Stromverbrauch | aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh&#039;&lt;br /&gt;
 set ytics &lt;br /&gt;
 set y2tics &lt;br /&gt;
 set grid ytics&lt;br /&gt;
 set ylabel &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 set y2label &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 #FileLog 4:CUL_HM_HM_ES_TX_WM_353594.kWh\x3a:0:delta-h&lt;br /&gt;
 plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Line 1&#039; ls l0 lw 2 with bars&lt;br /&gt;
&lt;br /&gt;
== Wiki ToDo ==&lt;br /&gt;
Seit dem FHEM Update vom 06.03.2016 werden bei Neueinrichtung mit Autocreate 2 Kanäle angelegt. Dies entspricht der Firmware Revision 1.1:&lt;br /&gt;
* _IEC_01&lt;br /&gt;
Im Gas-Modus werden hier die Werte geliefert.&lt;br /&gt;
Im IR-Modus kommen seit R12555 vom 12.11.2016 hier die Werte an.&lt;br /&gt;
state enthält dabei den Wert des readings energy. Möchte man hier z.B. die im letzten Zeitfenster gemessene Leistung anzeigen lassen, reading power, so hilft das Attribut stateformat&lt;br /&gt;
&amp;lt;code&amp;gt;{sprintf(&amp;quot;P: %.1f W&amp;quot;, ReadingsVal($name,&amp;quot;power&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* _IEC_02&lt;br /&gt;
&lt;br /&gt;
== Firmwareupdate ==&lt;br /&gt;
Das Gerät lässt sich in den Updatemodus versetzen, im dem die Batterien zunächst entfernt, dann beim Einsetzen die Anlerntaste gedrückt bleibt. die Leuchtdiode blinkt dann rot im schnellen Takt. Das FHEM-Kommando zum Senden der Firmware per &amp;lt;code&amp;gt;set &amp;lt;devicename&amp;gt; fwUpdate &amp;lt;Firmwaredatei.eq3&amp;gt;&amp;lt;/code&amp;gt; muss vor dem Einlegen der Batterie (+ &amp;quot;&amp;gt;&amp;quot; Taste) aufgegeben  werden. Erfolgt zum Zeitpunkt des Anstartens im Updatemodus keine Sendung der Firmware wird der Zählersensor normal gebootet. Die Meldung &amp;lt;code&amp;gt; &amp;lt;devicename&amp;gt; fwUpdate: fail:notInBootLoader&amp;lt;/code&amp;gt; im Filelog erscheint, wenn das FHEM fwUpdate Kommando &#039;&#039;zu spät&#039;&#039; gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Der Update dauert etwa eine Minute. Während des Updates blinkt die Diode rot in kurzen Intervallen.&lt;br /&gt;
Nach erfolgreichen Update muss der Sensor auf die Werkseinstellungen zurückgesetzt (&amp;quot;&amp;gt;&amp;quot; Taste 4 Sekunden drücken (Display zeigt reS), kurz warten, &amp;quot;&amp;gt;&amp;quot; noch mal 4 Sekunden drücken - Zählersensor rebootet), aus der FHEM Konfiguration entfernt und neu angelernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Reset nicht durchgeführt wird, kommt vom Sensor immer die Fehlermeldung: einmal langes und drei mal kurzes rotes Blinken (Sitz des Auslesekopfes prüfen). Diese Meldung ist in diesem Zusammenhang ziemlich irreführend.&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang ist im changelog.txt file der Firmware unvollständig beschrieben, da hier ein Update an der CCU vorausgesetzt wird und die CCU die Firmware wohl automatisch sendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Handbuch [http://files.elv.de/Assets/Produkte/14/1401/140143/Downloads/140143_sensor_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html] &lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,32827.msg252161.html#msg252161]&lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,30936.msg234877.html#msg234877]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17433</id>
		<title>HM-ES-TX-WM Zählersensor für Strom- und Gaszähler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-ES-TX-WM_Z%C3%A4hlersensor_f%C3%BCr_Strom-_und_Gasz%C3%A4hler&amp;diff=17433"/>
		<updated>2016-11-21T18:38:15Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrektur Zuordnung Channel 1 und 2 nach neuestem Update vom 10.11.2016&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-EM-TX-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Zählersensor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Powersensor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=6 V&lt;br /&gt;
|HWPowerConsumption=30 mA&lt;br /&gt;
|HWPoweredBy=4 Batterien LR6/AA/Mignon&lt;br /&gt;
|HWSize=68x105x30mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Der Zählersensor ist ein Datenerfassungssystem, das den Energieverbräuche (Strom, Gas) direkt am Zähler erfasst und in FHEM als laufender Saldo und als Momentanwerte verfügbar macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 195 g (inkl. 4 LR6/Mignon/AA-Batterien)&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
Mit den erfassten und gesammelten Daten lassen sich Aktionen beim Erreichen bestimmter Schwellwerte auslösen, Verbrauchs- und Kostenstatistiken erstellen sowie beliebige weitere Abhängigkeiten bilden. Durch die Funkdatenübertragung sowie den Batteriebetrieb (1 bis 2 Jahre Betriebsdauer verspricht der Hersteller mit einem Satz) ist die Installation denkbar einfach und erfordert lediglich beim Anbringen der Leseeinheit Genauigkeit.&lt;br /&gt;
&lt;br /&gt;
Im Februar 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen, zu dem es &lt;br /&gt;
* einen Ferraris-Sensor (für Stromzähler mit den markanten Laufscheiben),&lt;br /&gt;
* LED-Sensor (für neue Zähler mit S0-Schnittstelle) sowie &lt;br /&gt;
* BK-G4-Gaszähler von Elster-Kromschröder (die an einer Ziffernrolle einen kleinen Magneten haben, der über einen Sensor mit Reedkontakt erfasst wird)&lt;br /&gt;
gibt. Es ist laut Hersteller [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html ELV] nur der Bausatz verfügbar. Ein Fertiggerät ist aktuell nicht geplant.&lt;br /&gt;
&lt;br /&gt;
Die Zähler werden mit rückstandslos entfernbaren Klebepads angebracht.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &#039;&#039;&#039;list:        register | range              | peer     | description&#039;&#039;&#039; &lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central &lt;br /&gt;
   1: mtrConstGas      |   0 to 655.36      |          | constant gas &lt;br /&gt;
   1: mtrConstIr       |   0 to 65536       |          | constant IR &lt;br /&gt;
   1: mtrConstLed      |   0 to 65536       |          | constant led &lt;br /&gt;
   1: mtrSensIr        | -99 to 99          |          | sensiblity IR &lt;br /&gt;
   1: mtrType          |     literal        |          | type of measurement options:LED,gas,unknown,IR &lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
Der HM-ES-TX-WM sendet zyklisch im 3-Minuten Takt die aktuellen Verbrauchsdaten. Dabei ist für das Reading &amp;quot;power&amp;quot; (aktuelle Stromleistung in Watt) zu beachten, dass alle drei Minuten der &#039;&#039;zuletzt bekannte Wert&#039;&#039; gesendet wird. Das heißt im Besonderen:&lt;br /&gt;
&lt;br /&gt;
* Sollten innerhalb der drei Minuten mehrfach Impulse auftreten mit unterschiedlichen Leistungswerten, wird nur der zuletzt bekannte Wert genommen. Es findet keine Aggregation der Impulse (Mittelwert, Summe, …) statt.&lt;br /&gt;
* Sollten innerhalb der drei Minuten keinerlei Impulse auftreten, wird dennoch der zuletzt bekannte Leistungswert gesendet, auch wenn er mehrere Minuten/Stunden/Tage alt ist.&lt;br /&gt;
&lt;br /&gt;
Der state des Devices zeigt den letzten Übertragungsstatus an das Device, das Geräte unterstützt keinen Burst. D.h. einen an das Gerät abgesetzten Befehl z.B. getConfig oder einstellen von Zählerkonstanten sollte man möglichst am Geräte bestätigen, sonst könnte es sein, dass ein ACK zu spät zurück kommt und man sich anschließend im state über ein NACK wundert. &lt;br /&gt;
&lt;br /&gt;
Scheinbar gibt es für das reading energy bei 838860.7 einen Zählerüberlauf. [http://forum.fhem.de/index.php/topic,32827.msg270012.html#msg270012]&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Sensor wird mit einem FHEM im Update-Stand vom (mindestens) 7.2.2015 funktionsfähig eingebunden (getestet in der Variante mit Ferraris-Fühler). Es werden der Fühlertyp und die Fühlerkonstante richtig ausgelesen und im Reading &#039;&#039;energy&#039;&#039; die errechnete Energiemenge ausgegeben (bei Strom: Wattstunden, Wh).&lt;br /&gt;
&lt;br /&gt;
Für die perfekte Konfiguration wird auf die Seite &amp;quot;[[Heizleistung und Gasverbrauch]]&amp;quot; verwiesen, wo eine vollständige Lösung für die Umrechnung von Gasverbrauch in kW/h, Graphen und Hilfsprogramme vorgestellt wird.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
 &#039;&#039;&#039;Reading:       |Beispiel&#039;&#039;&#039;   &lt;br /&gt;
 D-firmware     |1.0&lt;br /&gt;
 D-serialNr     |MEQ0025452 &lt;br /&gt;
 battery        |ok&lt;br /&gt;
 boot           |off &lt;br /&gt;
 current        |0 &lt;br /&gt;
 eState         |E: 6199.9 P: 1713 I: 0 U: 0 f: 50 &lt;br /&gt;
 energy         |6199.9 &lt;br /&gt;
 energyOffset   |84413.2&lt;br /&gt;
 frequency      |50 &lt;br /&gt;
 power          |1713 &lt;br /&gt;
 powerOn        |2015-03-26 14:57:48&lt;br /&gt;
 voltage        |0&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug ===&lt;br /&gt;
 &#039;&#039;&#039;Event     |Beispielswert&#039;&#039;&#039;&lt;br /&gt;
 battery*  |ok&lt;br /&gt;
 energy    |10186.6&lt;br /&gt;
 power     |283&lt;br /&gt;
 current   |0&lt;br /&gt;
 voltage   |0&lt;br /&gt;
 frequency |50&lt;br /&gt;
 eState    |E: 10186.6 P: 283 I: 0 U: 0 f: 50&lt;br /&gt;
 boot      |off&lt;br /&gt;
&lt;br /&gt;
Ein battery-Event wird nicht zyklisch getriggert. Erst wenn die Batterie tatsächlich leer ist, wird eine entsprechende Meldung vom Gerät selber gesendet und ein battery-Event getriggert (battery: low).&lt;br /&gt;
&lt;br /&gt;
Mit einem Userreading lässt sich die Angabe aus &#039;&#039;energy&#039;&#039; (zum Beispiel für einen Stromzähler (Wh)) in die auf dem Zähler übliche Angabe kWh umrechnen und zugleich mit dem Aufaddieren des Unterschieds beim Start (das Zählermodul beginnt ja mit 0 Wh, während der Zähler meist schon einige Jahre auf der &amp;quot;Rolle&amp;quot; hat) die Angaben gleichziehen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;DeviceName&amp;gt; userReadings kWh {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;lt;DeviceName&amp;gt;&amp;quot;,&amp;quot;energy&amp;quot;,&amp;quot;???&amp;quot;)/1000+72031.5639)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Nach dem Erkennen durch [[autocreate]] wird der Zählersensor mit diesen Angaben eingebunden:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_ES_TX_WM_353594 CUL_HM 353594&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 IODev CUL_0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actCycle 000:10&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 actStatus alive&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 expert 2_full&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 firmware 1.0&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 model HM-ES-TX-WM&lt;br /&gt;
 attr CUL_HM_HM_ES_TX_WM_353594 subType powerSensor&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb mit den verschiedenen Zählern muß eines der Readings &#039;&#039;&#039;R-mtrConst&#039;&#039;&#039;XXX auf den jeweiligen verwendeten Zähler konfiguriert werden. Z.B. kann ein Ferraris-Stromzähler 100, 150 oder 200 Umdrehungen je kWh benötigen. Dies geschieht z.B. für 150 Meldungen je Einheit für einen Ferraris-Zähler mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstIr 150&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für einen Gaszähler auf der 1. Rolle (d.h. 1 Impuls je 0.1 m^3)&lt;br /&gt;
:&amp;lt;code&amp;gt;set CUL_HM_HM_ES_TX_WM_353594 regSet mtrConstGas 0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Fhem bis zum Anfang November 2015 war hier ein kleiner Bug enthalten, der diesen Wert nicht akzeptierte. In diesem Fall läßt sich die Anzahl der Impulse direkt am Gerät über das Display einstellen.&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
[[Datei:PlotStromverbrauchProStunde.png|mini|400px|rechts|Beispiel der graph. Darstellung]]&lt;br /&gt;
Der Zähler wird fortlaufend aufaddiert. Mit der delta-Funktion von SVG-Plot können die Verbräuche sehr gut visualisiert werden. &lt;br /&gt;
Beispiel Stromzähler:&lt;br /&gt;
&lt;br /&gt;
 set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
 set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
 set xdata time&lt;br /&gt;
 set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
 set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
 set title &#039;Stündlicher Stromverbrauch | aktuell: $data{currval1} ($data{min1} / $data{avg1} / $data{max1}) kWh&#039;&lt;br /&gt;
 set ytics &lt;br /&gt;
 set y2tics &lt;br /&gt;
 set grid ytics&lt;br /&gt;
 set ylabel &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 set y2label &amp;quot;kWh/h&amp;quot;&lt;br /&gt;
 #FileLog 4:CUL_HM_HM_ES_TX_WM_353594.kWh\x3a:0:delta-h&lt;br /&gt;
 plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Line 1&#039; ls l0 lw 2 with bars&lt;br /&gt;
&lt;br /&gt;
== Wiki ToDo ==&lt;br /&gt;
Seit dem FHEM Update vom 06.03.2016 werden bei Neueinrichtung mit Autocreate 2 Kanäle angelegt. Dies entspricht der Firmware Revision 1.1:&lt;br /&gt;
* _IEC_01&lt;br /&gt;
Im Gas-Modus werden hier die Werte geliefert.&lt;br /&gt;
Im IR-Modus kommen hier die Werte an.&lt;br /&gt;
state enthält dabei den Wert des readings energy. Möchte man hier z.B. die im letzten Zeitfenster gemessene Leistung anzeigen lassen, reading power, so hilft das Attribut stateformat&lt;br /&gt;
&amp;lt;code&amp;gt;{sprintf(&amp;quot;P: %.1f W&amp;quot;, ReadingsVal($name,&amp;quot;power&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* _IEC_02&lt;br /&gt;
&lt;br /&gt;
== Firmwareupdate ==&lt;br /&gt;
Das Gerät lässt sich in den Updatemodus versetzen, im dem die Batterien zunächst entfernt, dann beim Einsetzen die Anlerntaste gedrückt bleibt. die Leuchtdiode blinkt dann rot im schnellen Takt. Das FHEM-Kommando zum Senden der Firmware per &amp;lt;code&amp;gt;set &amp;lt;devicename&amp;gt; fwUpdate &amp;lt;Firmwaredatei.eq3&amp;gt;&amp;lt;/code&amp;gt; muss vor dem Einlegen der Batterie (+ &amp;quot;&amp;gt;&amp;quot; Taste) aufgegeben  werden. Erfolgt zum Zeitpunkt des Anstartens im Updatemodus keine Sendung der Firmware wird der Zählersensor normal gebootet. Die Meldung &amp;lt;code&amp;gt; &amp;lt;devicename&amp;gt; fwUpdate: fail:notInBootLoader&amp;lt;/code&amp;gt; im Filelog erscheint, wenn das FHEM fwUpdate Kommando &#039;&#039;zu spät&#039;&#039; gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
Der Update dauert etwa eine Minute. Während des Updates blinkt die Diode rot in kurzen Intervallen.&lt;br /&gt;
Nach erfolgreichen Update muss der Sensor auf die Werkseinstellungen zurückgesetzt (&amp;quot;&amp;gt;&amp;quot; Taste 4 Sekunden drücken (Display zeigt reS), kurz warten, &amp;quot;&amp;gt;&amp;quot; noch mal 4 Sekunden drücken - Zählersensor rebootet), aus der FHEM Konfiguration entfernt und neu angelernt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn der Reset nicht durchgeführt wird, kommt vom Sensor immer die Fehlermeldung: einmal langes und drei mal kurzes rotes Blinken (Sitz des Auslesekopfes prüfen). Diese Meldung ist in diesem Zusammenhang ziemlich irreführend.&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang ist im changelog.txt file der Firmware unvollständig beschrieben, da hier ein Update an der CCU vorausgesetzt wird und die CCU die Firmware wohl automatisch sendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Handbuch [http://files.elv.de/Assets/Produkte/14/1401/140143/Downloads/140143_sensor_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-zaehlersensor-strom-gas-bausatz.html] &lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,32827.msg252161.html#msg252161]&lt;br /&gt;
* Forum [http://forum.fhem.de/index.php/topic,30936.msg234877.html#msg234877]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=17397</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=17397"/>
		<updated>2016-11-20T20:59:29Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Präzisierung Funkqualität&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis mit einem TCM 310 zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=17217</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=17217"/>
		<updated>2016-11-13T09:05:14Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine sofortige Funkkommunikation auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.&lt;br /&gt;
In der Praxis zeigt sich, dass bei einem RSSI&amp;lt;-80 die Funkkommunikation nicht ausreichend stabil ist. Wenn dreimal hintereinander keine Funktbestätigung erhalten wurde, geht der Aktor in den Notbetrieb und öffnet das Ventil auf 50% oder lässt es auf einem gesetzten größeren Wert bis zur nächsten erfolgreichen bisdirektionalen Kommunikation offen. Das Anpassen der Antennenausrichtung ist hier sehr wichtig.}}&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||enabled / &#039;&#039;&#039;disabled&#039;&#039;&#039;||enabled zeigt ausreichende Temperaturdifferenz zur Speisung des Akkus an&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=16884</id>
		<title>ReadingsGroup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=16884"/>
		<updated>2016-10-30T11:28:14Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrektur bei rgTimer (im zweiten attr war noch hieß es noch rgTimer_wasser)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:readingsGroup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache zusammenfassende Darstellung von Informationen über mehrere Geräte und deren Steuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=readingsGroup&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=33_readingsGroup.pm&lt;br /&gt;
|ModOwner=Andre ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Fhem-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[readingsGroup]] bietet eine einfache Möglichkeit, &#039;&#039;Readings&#039;&#039; (kein Präfix vor dem Reading-Namen), &#039;&#039;Internals&#039;&#039; (Präfix &amp;quot;+&amp;quot; vor dem Namen des internen Wertes) und &#039;&#039;Attributes&#039;&#039; (Präfix &amp;quot;?&amp;quot; vor dem Namen des Attributs) von einem oder mehreren &#039;&#039;Devices&#039;&#039; darzustellen und flexibel zu formatieren.&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung im Browserfenster geschieht per longpoll und überträgt nur die jeweils geänderten Zellen. Wenn eine readingsGroup in keinem Browserfenster angezeigt wird findet keine longpoll aktualisierung statt.&lt;br /&gt;
&lt;br /&gt;
== Definition == &lt;br /&gt;
Siehe [http://fhem.de/commandref.html#readingsGroup commandref].&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Randnotiz|RNText=In allen Mappings die einen Hash verwenden muss der Key (das was jeweils links von =&amp;gt; Operator steht) in Anführungszeichen stehen. Die einzige Ausnahme hiervon sind Keys die aus einem String bestehen der mit einem Buchstaben beginnt und nur Buchstaben und Zahlen enthält.}}&lt;br /&gt;
Weitergehende Erläuterungen zu einzelnen Attributen.&lt;br /&gt;
&lt;br /&gt;
Die komplette Liste der Attribute ist der commandref zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== noheading ===&lt;br /&gt;
[[Datei:ReadingsGroup_noheading.png|mini|rechts|400px|ReadingsGroup: rechts mit &amp;quot;noheading&amp;quot; Attribut, links der anklickbare Titel]]&lt;br /&gt;
Das Attribut &amp;lt;code&amp;gt;noheading&amp;lt;/code&amp;gt; führt dazu, dass der Alias der ReadingsGroup nicht mehr als Titel angezeigt wird. Das kann wünschenswert sein, wenn die ReadingsGroup auf einer [[Dashboard]]-Seite angezeigt werden soll, hat allerdings den Nachteil, dass die Detail-Ansicht der ReadingsGroup nicht mehr über einen Klick auf den Titel aufgerufen werden kann. Der Einstellungsdialog der ReadingsGroup ist dann nur noch (z.&amp;amp;nbsp;B.) über&lt;br /&gt;
* &amp;lt;code&amp;gt;list TYPE=readingsGroup&amp;lt;/code&amp;gt;&lt;br /&gt;
* einen &amp;quot;Probably associated with&amp;quot;-Link eines anderen Objekts oder über&lt;br /&gt;
* manuelle Modifikation der URL eines anderen Objekts (&amp;lt;code&amp;gt;http:.../fhem?detail=&amp;lt;objektname&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== nolinks ===&lt;br /&gt;
Devicenamen und Titel der readingsGroup verlinken nicht mehr zur zugehörigen Detailansicht und sind nicht mehr anklickbar.&lt;br /&gt;
&lt;br /&gt;
=== nostate ===&lt;br /&gt;
Das state-Reading wird bei regex match nicht berücksichtigt und nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== notime ===&lt;br /&gt;
Es werden keine Timestamps für die Readings angezeigt. Nur für einspaltige readingsGroups sinnvoll.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Bitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im [[PGM2|Web Interface]] im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Beim manuellen Einfügen in eine [[Konfiguration|Konfigurationsdatei]] sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Einfache Auswahl über Reading-Namen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define battStatus readingsGroup .*:[Bb]attery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;Battery&#039;&#039;&#039; oder &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=3 | [[Datei:rgBattery.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus alias FHT Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus mapping %ROOM &amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ROOM&#039;&#039; führt dazu, dass der Raumname als Zeilentitel angezeigt wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Übersicht HomeMatic Geräte ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define HM_Components readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Name&amp;gt;,&amp;lt;Model&amp;gt;,&amp;lt;S/N&amp;gt; TYPE=CUL_HM:+NAME,?model,D-serialNr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auswahl über Reading-Namen, Status als Symbol dargestellt ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_battery readingsGroup .*:battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=4 | [[Datei:rgBattery2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery alias Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt der reading Werte &amp;quot;ok&amp;quot; und &amp;quot;low&amp;quot; soll ein Icon angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr rg_battery commands { &amp;quot;battery.low&amp;quot; =&amp;gt; &amp;quot;set %DEVICE replaceBatteryForSec 60&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für LaCrosse devices kann man beim Klick auf ein rotes &amp;quot;battery low icon&amp;quot; direkt replaceBatteryForSec setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading-Werte zuordnen (Icon / Text) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg readingsGroup Contact.Dachboden_gross:sensed.*&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle sensedreadings des Contact.Dachboden_gross device. &lt;br /&gt;
| rowspan=4 | [[Datei:rgFenster.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg mapping { &#039;sensed.A&#039; =&amp;gt; &#039;links&#039;, &#039;sensed.B&#039; =&amp;gt; &#039;rechts&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung rechts/links&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg valueFormat {($VALUE eq &#039;1&#039;)?&amp;quot;fts_window_roof&amp;quot;:&amp;quot;fts_window_roof_open_2&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung von reading Wert zu Icon Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon %VALUE &amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt des reading Werts soll ein Icon angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Formatvorgabe für Ausgabewerte ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define TempHygro readingsGroup TYPE=CUL_WS:temperature,humidity,dewpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039;, &#039;&#039;&#039;dewpoint&#039;&#039;&#039; von allen Devices des Typs &#039;&#039;&#039;CUL_WS&#039;&#039;&#039;&lt;br /&gt;
| rowspan=4 | [[Datei:rgTemperatur.png|thumb|[[S300TH]]-Werte in einer readingsGroup]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro alias Temperatur / rel. Feuchte / Taupunkt&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias der readingsGroup wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro mapping %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ALIAS&#039;&#039; führt dazu, dass der Alias des Geräts als Zeilentitel angezeigt wird.&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro valueFormat { temperature =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;, humidity =&amp;gt; &amp;quot;%.1f %%&amp;quot;, dewpoint =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung der Ausgabewerte. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; &amp;quot;%&amp;quot; die in der Ausgabe erscheinen sollen, müssen verdoppelt werden!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ausgabestil (hier rechtsbündig) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Wetter readingsGroup WetterXXX:&amp;lt;%temp_temperature&amp;gt;,&amp;lt;Temperatur&amp;gt;,temperature WetterXXX:&amp;lt;%weather_humidity&amp;gt;,&amp;lt;Luftfeuchte&amp;gt;,humidity WetterXXX:&amp;lt;%weather_barometric_pressure&amp;gt;,&amp;lt;Luftdruck&amp;gt;,pressure&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039; und &#039;&#039;&#039;pressure&#039;&#039;&#039; vom Device WetterXXX jeweils mit einem Icon und einem Label davor.&lt;br /&gt;
| rowspan=3 | [[Datei:rgWetter.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueFormat { temperature =&amp;gt; &#039;%1.f &amp;amp;amp;deg;C&#039;, humidity =&amp;gt; &#039;%1.f %%&#039;, pressure =&amp;gt; &#039;%i mbar&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Readingswerte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueStyle style=&amp;quot;text-align:right&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Readings sollen rechtsbündig dargestellt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Value ausgeben ===&lt;br /&gt;
Diese Beispiel könnte entfallen (nächstes Beispiel ist sehr ähnlich; es wird lediglich ein weiterer Wert ausgegeben).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&lt;br /&gt;
| rowspan=1 | [[Datei:rgculRSSI.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Values ausgeben ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI,+cul_TIME&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert mit der zugehörigen Zeit aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&amp;lt;br&amp;gt;&amp;quot;Internal Values&amp;quot; werden durch das vorangestellte &#039;&#039;&#039;+&#039;&#039;&#039; (Pluszeichen) identifiziert.&lt;br /&gt;
| rowspan=2 | [[Datei:rgculRSSI2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
|attr culRSSI valueStyle {return undef if($READING =~ m/TIME/); ($VALUE &amp;lt;= -85)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:($VALUE &amp;lt;= -80)?&#039;style=&amp;quot;color:yellow&amp;quot;&#039;:undef}&lt;br /&gt;
|Schlechte RSSI Werte sollen abhängig von zwei Schwellwerten gelb oder rot eingefärbt werden (auf dem Screenshot nicht zu sehen).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Alle Readings eines Gerätes, mit Ausnahme von... ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Systemstatus readingsGroup sysstat&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings des sysstat Device&lt;br /&gt;
| rowspan=4 | [[Datei:rgSysstat.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne state&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus mapping {&#039;load&#039; =&amp;gt; &#039;Systemauslastung&#039;, &#039;temperature&#039; =&amp;gt; &#039;Systemtemperatur in &amp;amp;amp;deg;C&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anzeige auf einem Floorplan ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizung readingsGroup t(1|2|3):temperature&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperatur readings der Devices t1, t2 und t3&lt;br /&gt;
| rowspan=6 | [[Datei:rgHeizung.png|thumb|220px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung mapping {&#039;t1.temperature&#039; =&amp;gt; &#039;Vorlauf&#039;, &#039;t2.temperature&#039; =&amp;gt; &#039;R&amp;amp;amp;&amp;amp;uuml;cklauf&#039;, &#039;t3.temperature&#039; =&amp;gt; &#039;Zirkulation&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung nameStyle style=&amp;quot;text-align:left&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zeilentitel linksbündig wegen floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung style style=&amp;quot;font-size:20px;color:lightgray&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Großer Font und Farbe passend für den floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung valueFormat : %.1f &amp;amp;amp;deg;C&amp;lt;/code&amp;gt;&lt;br /&gt;
| Doppelpunkt zwischen Zeilentitel und Wert, eine Nachkommastelle plus Einheit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LightScene DropDown-Menü für smallscreen Styles oder Floorplan ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define lcDropDown readingsGroup meineLightScene:!state&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die LightScene &#039;&#039;meineLightScene&#039;&#039; soll ein DropDown-Menü zur Auswahl der Szene erstellt werden.&lt;br /&gt;
| rowspan=6 |&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown commands { state =&amp;gt; &#039;scene:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Anzeige des state Readings wird auf das DropDown-Menü für das scene Kommando gemapped.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Keine Readingnamen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Kein Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schriftgrößen, Farben, Icons ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgVerbrauchPCA301.png|links|mini|400px|Schriftgröße, Farbe, Icons...]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Verbrauch readingsGroup TYPE=PCA301:state,power,consumption&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings state, power und consumption aller [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] Devices mit einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch mapping %ROOM %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Raumname und der Alias werden als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch nameStyle style=&amp;quot;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Zeilentitel soll fett sein&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch style style=&amp;quot;font-size:20px&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alles in einem größeren Font&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch valueFormat {power =&amp;gt; &amp;quot;%.1f W&amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die power und consumption readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die Dosen, die schaltbar sind, soll das anklickbare device icon gezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueStyle {($READING eq &amp;quot;power&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 40)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:&#039;style=&amp;quot;color:green&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|Wenn das power reading &amp;gt;40 ist, soll es in rot angezeigt werden, alle anderen Werte und readings in grün&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wertabhängige Farbgebung ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:TemperaturenRG.png|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:TemperaturenRG2.png|600px|mini|links|Andere Werte - andere Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzTemperaturenRG readingsGroup Aussen:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Wohnzimmer:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Kasten_E_Geraete:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings temperatur und humidity der Devices Aussen, Wohnzimmer und Kasten_E_Geraete in einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG group 3. Temperaturen&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG valueFormat {temperature =&amp;gt; &amp;quot;%.1f °C&amp;quot;, humidity =&amp;gt;&amp;quot;%.1f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die temperatur und humidity readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzTemperaturenRG valueStyle { if($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 5) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 21) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 20) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 28) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 65) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 60) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}else{&#039;style=&amp;quot;color:green&amp;quot;&#039;} }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enigma Receiver ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:ReceiverRG.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:ReceiverRGmute.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzReceiverRG readingsGroup wzReceiver:,&amp;lt;Aktuell&amp;gt;,eventtitle,&amp;lt;Rest&amp;gt;,eventremaining_hr,&amp;lt;Dauer&amp;gt;,eventduration_hr wzReceiver:&amp;lt;Beschreibung&amp;gt;,eventdescription wzReceiver:,&amp;lt;Nächste&amp;gt;,eventtitle_next,&amp;lt;Start&amp;gt;,eventstart_next_hr,&amp;lt;Dauer&amp;gt;,eventduration_next_hr wzReceiver:,&amp;lt;HDD Kapazität&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,wzReceiver:hdd1_free wzReceiver:,&amp;lt;Lautstärke&amp;gt;,volume,&amp;lt;HDD&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,hdd1_free&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mehrere readings des Device wzReceiver in mehreren Zeilen. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke, mute angezeigt. Farbige Anzeige des freien Speicherplatzes&lt;br /&gt;
&#039;&#039;&#039;Benötigt:&#039;&#039;&#039; ENIGMA2 Receiver, 70_ENIGMA2.pm - Siehe: [[Enigma2 Receiver (Dreambox, VUplus etc.) steuern]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG group Fernseher Receiver&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG mapping &amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&lt;br /&gt;
| mapping wird auf &amp;amp;amp;nbsp; (Leerzeichen) gesetzt, damit der Device Name nicht angezeigt wird&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueColumns { eventdescription =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Beschreibung soll über 4 Spalten gehen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueFormat { wzReceiverRGvalueFormat($DEVICE,$READING,$VALUE);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung wird in die 99_myUtils.pm ausgelagert. Siehe: [[99 myUtils anlegen]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzReceiverRG valueStyle { if($READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 200){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }elsif( $READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 500 ){ &#039;style=&amp;quot;color:orange&amp;quot;&#039; }elsif( $READING eq &amp;quot;volume&amp;quot; &amp;amp;&amp;amp; ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot; ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:green&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;mute&amp;lt;/span&amp;gt; angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
wzReceiverRGvalueFormat($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING,$VALUE) = @_;&lt;br /&gt;
 &lt;br /&gt;
  if($READING eq &#039;hdd1_capacity&#039;) { &lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;hdd1_free&#039;) {&lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;volume&#039; ) {&lt;br /&gt;
    if( ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
      return &amp;quot;mute&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &amp;quot;%i %%&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Batterie- und Fensterstatus ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung3.png|thumb|links|500px|Heizungswerte inklusive Batterie- und Fensterstatus]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;%18&amp;gt;,&amp;lt;%20&amp;gt;,&amp;lt;%22&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte commands { &#039;Heizungswerte.18&#039; =&amp;gt; &#039;set $DEVICE desired-temp 18&#039;, &#039;Heizungswerte.20&#039; =&amp;gt; &#039;set $DEVICE desired-temp 20&#039;, &#039;Heizungswerte.22&#039; =&amp;gt; &#039;set $DEVICE desired-temp 22&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Links/Kommandos die hinter den 18, 20 und 22 liegen sollen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Ventilposition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:Rg_Heizung_Valveposition.png|thumb|links|500px|Heizungswerte inklusive Statusinformationen (MAX!)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Ventil&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;MaxV&amp;gt;,&amp;lt;GID&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Batterie&amp;gt; TYPE=CUL_HM:ValvePosition,desired-temp,measured-temp,R-valveMaxPos,groupid,mode,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;MAX&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte mapping %ROOM&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Raumnamen werden angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb (fett) sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte room Heizung&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die &amp;quot;readingsgroup&amp;quot; wird dem Raum &amp;quot;Heizung&amp;quot; zugeordnet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueFormat {&#039;temperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;desiredTemperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;valveposition&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot;, &#039;maxValveSetting&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es wird noch die Einheit °C hinter den Temperaturwerten angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriezustand werden Icons anstatt Klartextwerte genommen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueStyle { if($READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20){ &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt;= 20 ){ &#039;style=&amp;quot;color:blue&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23 ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:gray&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperaturwerte werden abhängig vom Wert farbig dargestellt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status und Regelmöglichkeit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung2.png|thumb|500px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte2 readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;up&amp;quot;)}@desired-temp&amp;gt;,desired-new,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;down&amp;quot;)}@desired-temp&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueStyle {($VALUE eq &amp;quot;00&amp;quot;)?&#039;style=&amp;quot;visibility:hidden&amp;quot;&#039;:&#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nach dem Einstellen den Wert wieder ausblenden. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#Heizung regeln in readingsGroup&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDown($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
  &lt;br /&gt;
  my $icon = $CMD;&lt;br /&gt;
  my $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-new&amp;quot;,&amp;quot;20&amp;quot; );&lt;br /&gt;
  $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-temp&amp;quot;,&amp;quot;20&amp;quot; )&lt;br /&gt;
     if( !$VALUE || $VALUE == 0 );&lt;br /&gt;
  my $link;&lt;br /&gt;
  &lt;br /&gt;
  if( $CMD eq &amp;quot;up&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_upward&amp;quot;;&lt;br /&gt;
    $VALUE += 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;lt;= 24 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@red&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;down&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_downward&amp;quot;;&lt;br /&gt;
    $VALUE -= 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;gt;= 18 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@blue&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $notify = &amp;quot;notifyHeizungUpDown&amp;quot;;&lt;br /&gt;
  if( !defined($defs{$notify}) ) {&lt;br /&gt;
    CommandDefine(undef,&lt;br /&gt;
                   &amp;quot;$notify notify .*:desired-new.* &amp;quot;&lt;br /&gt;
                   .&amp;quot;{ myUtils_HeizungUpDownNotify(\$NAME,\$EVTPART1); }&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $ret = &amp;quot;%$icon&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;%$link&amp;quot; if( $link );&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDownNotify($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$VALUE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  return if( $VALUE == 0 );&lt;br /&gt;
  &lt;br /&gt;
  my $at = &amp;quot;triggerHeizungUpDown_$DEVICE&amp;quot;;&lt;br /&gt;
  CommandDelete(undef, $at) if( defined($defs{$at}) );&lt;br /&gt;
  CommandDefine(undef,&lt;br /&gt;
                &amp;quot;$at at +00:00:03 &amp;quot;&lt;br /&gt;
                .&amp;quot;{my \$v = ReadingsVal(\&amp;quot;$DEVICE\&amp;quot;,\&amp;quot;desired-new\&amp;quot;,undef);&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;set $DEVICE desired-temp \$v\&amp;quot;) if( \$v );&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;setreading $DEVICE desired-new 00\&amp;quot;);}&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  return undef;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit werden die Icons zum Ändern der gewünschten Temperatur dargestellt und im Bereich &amp;gt;=18 und &amp;lt;= 24 Grad anklickbar gemacht. Zwischen den Pfeilen wird der gerade eingestellte Wert angezeigt. Wenn dieser drei Sekunden nicht mehr geändert wurde wird die desired-temp auf diesen Wert gesetzt und die Anzeige zwischen den Pfeilen ausgeblendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status, Steuerung und Wochenprofil ===&lt;br /&gt;
Dieses Beispiel funktioniert nur mit HomeMatic HM-CC-RT-DN, für andere Thermostate müssen an diversen Stellen Änderungen vorgenommen werden.&lt;br /&gt;
{{Todo|Überarbeiten: umstellen auf readingList oder setreading, label als readings in die readingsGroup selber stecken statt in einen extra dummy. oder !&amp;lt;reading&amp;gt; und mapping verwenden.}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgThermostate.png|thumb|750px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;pre&amp;gt;set d_label Heizung Heizung &lt;br /&gt;
set d_label Temperatur Temperatur &lt;br /&gt;
set d_label  Status Status &lt;br /&gt;
set d_label Wochenplan Wochenplan &lt;br /&gt;
set d_label Werktag Werktag &lt;br /&gt;
set d_label Samstag Samstag &lt;br /&gt;
set d_label Sonntag Sonntag &lt;br /&gt;
set d_label Zeitraum1 Zeitraum 1 &lt;br /&gt;
set d_label Zeitraum2 Zeitraum 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|Erzeugen der Readings im Device [[dummy#d_label|d_label]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
define rg_thermostate readingsGroup &amp;lt;&amp;gt;,Heizung@d_label,&amp;lt;|&amp;gt;,Temperatur@d_label,&amp;lt;|&amp;gt;,Status@d_label,&amp;lt;|&amp;gt;,Wochenplan@d_label,&amp;lt;|&amp;gt;,Werktag@d_label,&amp;lt;|&amp;gt;,Samstag@d_label,&amp;lt;|&amp;gt;,Sonntag@d_label,&amp;lt;|&amp;gt;,&amp;lt;&amp;gt; CUL_HM_HM_CC_RT_DN_......_Clima:&amp;lt;&amp;gt;,?alias,&amp;lt;|&amp;gt;,&amp;lt;Soll&amp;gt;,desired-temp,&amp;lt;Tag&amp;gt;,dayTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},impossible@{$DEVICE},&amp;lt;|&amp;gt;,controlMode,R-globalBtnLock@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;|&amp;gt;,Zeitraum1@d_label,&amp;lt;|&amp;gt;,workday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},&amp;lt;%system_fhem_update&amp;gt;,&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;,state@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%getConfig&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;Ist&amp;gt;,measured-temp,&amp;lt;Nacht&amp;gt;,nightTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,&amp;lt;Ventil&amp;gt;,ValvePosition,&amp;lt;|&amp;gt;,Zeitraum2@d_label,&amp;lt;|&amp;gt;,workday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},impossible@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%burstXmit&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices &amp;lt;b&amp;gt;CUL_HM_HM_CC_RT_DN_......_Clima&amp;lt;/b&amp;gt;, entsprechender [[Makefine#d_climaControl|d_climaControl]] (müssen vorher angelegt werden) und [[dummy#d_label|d_label]]. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate commands { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;dayTemp:&#039;, &#039;controlMode&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE controlMode&#039;, &#039;R-globalBtnLock&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE globalBtnLock&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;workday_period_1_start:&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;workday_period_1_stop:&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;saturday_period_1_start:&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;saturday_period_1_stop:&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;sunday_period_1_start:&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;sunday_period_1_stop:&#039;, &#039;rg_thermostate.system_fhem_update&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE setTimeTable&#039;, &#039;rg_thermostate.getConfig&#039; =&amp;gt; &#039;set $DEVICE getConfig&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;nightTemp:&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;workday_period_2_start:&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;workday_period_2_stop:&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;saturday_period_2_start:&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;saturday_period_2_stop:&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;sunday_period_2_start:&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;sunday_period_2_stop:&#039;, &#039;rg_thermostate.burstXmit&#039; =&amp;gt; &#039;set $DEVICE burstXmit&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Temperaturen werden als DropDown Auswahl dargestellt, Icons triggern [[readingsGroup#sub_rg|ntfy_rg]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate mapping { &#039;desired-temp&#039; =&amp;gt; &#039;&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Texte vor den DropDowns.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
attr rg_thermostate nameStyle{($READING eq &amp;quot;Soll&amp;quot; ||$READING eq &amp;quot;Tag&amp;quot; ||$READING eq &amp;quot;%getConfig&amp;quot; ||$READING eq &amp;quot;Ist&amp;quot; ||$READING eq &amp;quot;Nacht&amp;quot; ||$READING eq &amp;quot;Ventil&amp;quot; )?&#039;style=&amp;quot;text-align:right&amp;quot;&#039; :($READING eq &amp;quot;%burstXmit&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :&#039;style=&amp;quot;&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten der Überschriften die keine readings sind.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Device Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueColumns { &#039;Heizung&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Temperatur&#039; =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039;, &#039;Status&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Werktag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Samstag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Sonntag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;alias&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings sollen über mehrere Spalten dargestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;deg;C&amp;quot;, &#039;ValvePosition&#039; =&amp;gt; &amp;quot;%0.1f %%&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung für measured-temp und ValvePosition.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueIcon { &#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@green&#039;, &#039;controlMode.set_auto&#039; =&amp;gt; &#039;sani_heating_automatic@orange&#039;, &#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@red&#039;, &#039;controlMode.set_manual&#039; =&amp;gt; &#039;sani_heating_manual@orange&#039;, &#039;R-globalBtnLock.on&#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.on &#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.set_on &#039; =&amp;gt; &#039;secur_locked@orange&#039;, &#039;R-globalBtnLock.off&#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.off &#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.set_off &#039; =&amp;gt; &#039;secur_open@orange&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zuweisung der Icons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr rg_thermostate valueStyle{($READING eq &amp;quot;Heizung&amp;quot; ||$READING eq &amp;quot;Temperatur&amp;quot; ||$READING eq &amp;quot;Status&amp;quot; ||$READING eq &amp;quot;Wochenplan&amp;quot; ||$READING eq &amp;quot;Werktag&amp;quot; ||$READING eq &amp;quot;Samstag&amp;quot; ||$READING eq &amp;quot;Sonntag&amp;quot; )?&#039;style=&amp;quot;font-size:20px;;color:RoyalBlue;;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;alias&amp;quot; )?&#039;style=&amp;quot;font-size:11px;;font-weight:bold;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp;$VALUE &amp;gt; 40 )?&#039;style=&amp;quot;font-weight:bold;;color:Orange;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;desired-temp&amp;quot; ||$READING eq &amp;quot;measured-temp&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;state&amp;quot; ||$READING eq &amp;quot;ValvePosition&amp;quot; )?&#039;style=&amp;quot;text-align:left&amp;quot;&#039; :&#039;style=&amp;quot;text-align:right&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten und Einfärben der Readings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungsteuerung für HM Wand- und Heizkörperthermostate ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel wurde für HM-TC-IT-WM-W-EU / HM-CC-RT-DN Geräte erstellt. Verwendung anderer Thermostate wird ggf. Anpassungen erforderlich machen. Die Geräte werden nicht automatisch ermittelt, sondern sind einzeln angegeben.&lt;br /&gt;
Es werden Soll- und Ist-Temperaturen angezeigt, Luftfeuchte und Ventilpositionen, Modus, Batterie und Global-Tastenlock.&lt;br /&gt;
Steuerungsmöglichkeiten: Solltemperatur, Modus (Manual/Automatik), (globale) Tastenlock.&lt;br /&gt;
Die Abweichung der Isttemperatur, die Ventilpositionen, Batteriestand etc. werden farblich hervorgehoben. &lt;br /&gt;
&lt;br /&gt;
Die Gerätenamen (EG_WZ_WT01_Climate / EG_WZ_WT01, EG_WZ_TT01_Clima / EG_WZ_TT01 / EG_WZ_TT02, OG_BZ_WT01_Climate / OG_BZ_WT01, OG_BZ_TT01_Clima / OG_BZ_TT01, OG_SZ_WT01_Climate / OG_SZ_WT01, OG_SZ_TT01_Clima / OG_SZ_TT01, OG_DZ_WT01_Climate / OG_DZ_WT01, OG_DZ_TT01_Clima / OG_DZ_TT01) müssen natürlich entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgHMTh.jpg|thumb|500px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;define heatingInfo readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Soll neu&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;Ventil / RH&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Lock&amp;gt;,&amp;lt;Bat&amp;gt;\&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@EG_WZ_WT01,batteryLevel@EG_WZ_WT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT01,batteryLevel@EG_WZ_TT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT02_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT02,batteryLevel@EG_WZ_TT02  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_BZ_WT01,batteryLevel@OG_BZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_BZ_TT01,batteryLevel@OG_BZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_SZ_WT01,batteryLevel@OG_SZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_SZ_TT01,batteryLevel@OG_SZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_DZ_WT01,batteryLevel@OG_DZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_DZ_TT01,batteryLevel@OG_DZ_TT01&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo cellStyle { &amp;quot;r:1&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold;;font-size:16px&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:2,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:6,c:0&amp;quot; =&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:9,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:12,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Schrift fett setzen etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo commands {&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;heatingInfo.sollsetz&#039;=&amp;gt;&#039;desired-temp:5.0,12.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;controlMode.manual&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode auto&amp;quot;,&amp;quot;controlMode.auto&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode manual&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.on&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock off&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.off&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock on&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Heizungssteuerung ermöglichen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo mapping {OG_BZ_WT01_Climate=&amp;gt;&amp;quot;Bad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_SZ_WT01_Climate=&amp;gt;&amp;quot;Schlafzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_DZ_WT01_Climate=&amp;gt;&amp;quot;Duschbad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,EG_WZ_WT01_Climate=&amp;gt;&amp;quot;Wohnzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler1&amp;quot;,EG_WZ_TT02_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler2&amp;quot;,&#039;desired-temp&#039; =&amp;gt; &#039;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gewünschte Namen definieren.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueFormat {if($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp; $VALUE ne &amp;quot;0&amp;quot;){$VALUE = int($VALUE/10)*10}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($READING eq &amp;quot;batteryLevel&amp;quot;){if($VALUE&amp;gt;=3){$VALUE=100}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($VALUE&amp;gt;=2.7){$VALUE=75}elsif($VALUE&amp;gt;=2.5){$VALUE=50}elsif($VALUE&amp;gt;=2.2){$VALUE=25}&amp;lt;br&amp;gt;&lt;br /&gt;
else{$VALUE=0}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Werte vorformatieren (für die Icon-Zuordnung).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueIcon {&#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@795CFF&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@FFC13A&#039;, &#039;controlMode.boost&#039; =&amp;gt; &#039;sani_heating_boost@FB0C02&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;humidity&#039;=&amp;gt;&#039;humidity@6FD9FB&#039;, &#039;R-globalBtnLock.on&#039;=&amp;gt;&#039;secur_locked@F7301D&#039;, &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.off&#039;=&amp;gt;&#039;secur_open@0CFB0C&#039;,&#039;ValvePosition.0&#039; =&amp;gt; &#039;sani_heating_level_0@002AE0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.10&#039; =&amp;gt; &#039;sani_heating_level_10@F8D53D&#039;,&#039;ValvePosition.20&#039; =&amp;gt; &#039;sani_heating_level_20@FF9341&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.30&#039; =&amp;gt; &#039;sani_heating_level_30@F17F3F&#039;,&#039;ValvePosition.40&#039; =&amp;gt; &#039;sani_heating_level_40@E46C3C&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.50&#039; =&amp;gt; &#039;sani_heating_level_50@DE3B3A&#039;,&#039;ValvePosition.60&#039; =&amp;gt; &#039;sani_heating_level_60@A30D2D&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.70&#039; =&amp;gt; &#039;sani_heating_level_70@B40A23&#039;,&#039;ValvePosition.80&#039; =&amp;gt; &#039;sani_heating_level_80@C40619&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.90&#039; =&amp;gt; &#039;sani_heating_level_90@D4030F&#039;,&#039;ValvePosition.100&#039; =&amp;gt; &#039;sani_heating_level_100@E50005&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.100&#039;=&amp;gt;&#039;measure_battery_100@0CFB0C&#039;,&#039;batteryLevel.75&#039;=&amp;gt;&#039;measure_battery_75@42BC0A&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.50&#039;=&amp;gt;&#039;measure_battery_50@F5FF10&#039;,&#039;batteryLevel.25&#039;=&amp;gt;&#039;measure_battery_25@FB5909&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.0&#039;=&amp;gt;&#039;measure_battery_0@E50005&#039;,&#039;controlMode.set_boost&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.set_auto&#039; =&amp;gt; &#039;hourglass&#039;,&#039;controlMode.set_manual&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.set_on&#039; =&amp;gt; &#039;hourglass&#039;,&#039;R-globalBtnLock.set_off&#039; =&amp;gt; &#039;hourglass&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Icons zuordnen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueStyle {if($READING eq &amp;quot;measured-temp&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,&#039;desired-temp&#039;,0);;&amp;lt;br&amp;gt;&lt;br /&gt;
if($t-$d&amp;gt;=1){&#039;style=&amp;quot;color:rgb(251,63,11);;&amp;quot;&#039;}elsif($t-$d&amp;lt;=-1){&#039;style=&amp;quot;color:rgb(79,58,251);;&amp;quot;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
else{&#039;style=&amp;quot;color:rgb(12,251,12);;&amp;quot;&#039;}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farben (zu kalt: blau, zu warm: rot, ok: grün).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueSuffix {&amp;quot;desired-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;quot;measured-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ValvePosition&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; %)&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;humidity&amp;quot;=&amp;gt;&amp;quot; &amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; % RH&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;batteryLevel&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; V)&amp;quot;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Messeinheiten und Zahlenwerte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings aus zusätzlichen Devices ===&lt;br /&gt;
Im folgenden Beispiel wird gezeigt wie sich Readings zusätzlicher Devices zu einer Zeile mit mehreren Readings hinzufügen lassen. Diese zusätzlichen Devices können z.b. die unterschiedlichen Channel eines HomeMatic Gerätes sein. Im folgenden Beispiel wird der Name des zugehörigen Geräts dynamisch bestimmt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung4.png|thumb|750px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define myTemp readingsGroup &amp;lt;Raum&amp;gt;,&amp;lt;Tist&amp;gt;,&amp;lt;Tsoll&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Tnight&amp;gt;,&amp;lt;Tday&amp;gt;,&amp;lt;Hum&amp;gt;,&amp;lt;BatTC&amp;gt;,&amp;lt;Vist&amp;gt;,&amp;lt;Vsoll&amp;gt;,&amp;lt;Verr&amp;gt;,&amp;lt;BatVD&amp;gt; Thermostat.(WZ|OZ|AZ|Bad|Kueche|SZ|GZ|Bad.OG):measured-temp,desired-temp,controlMode,night-temp,day-temp,humidity,battery,ValvePosition@{valveOfDevice($DEVICE)},ValveDesired@{valveOfDevice($DEVICE)},R-valveErrorPos@{valveOfDevice($DEVICE)},battery@{valveOfDevice($DEVICE)} Broetje:ToutIst &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings aller Thermostat Devices und des jeweils zugehörigen Ventilantriebs. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp mapping    { &#039;Broetje&#039; =&amp;gt; &#039;Garten&#039;,&#039;Thermostat.AZ&#039; =&amp;gt; &#039;EG Arbeitszimmer&#039;,&#039;Thermostat.SZ&#039; =&amp;gt; &#039;OG Schlafzimmer&#039;,&#039;Thermostat.WZ&#039;=&amp;gt;&#039;EG Wohnzimmer&#039;,&#039;Thermostat.Kueche&#039; =&amp;gt; &#039;EG Küche&#039;,&#039;Thermostat.GZ&#039; =&amp;gt; &#039;OG Gästezimmer&#039;,&#039;Thermostat.Bad&#039; =&amp;gt; &#039;EG Bad&#039;,&#039;Thermostat.Bad.OG&#039; =&amp;gt; &#039;OG Bad&#039;,&#039;Thermostat.OZ&#039; =&amp;gt; &#039;EG Kaminzimmer&#039;,&#039;desired-temp&#039; =&amp;gt; &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Benennung der Zeilentitel (Das ist je nach Konfiguration auch über $ALIAS und/oder $ROOM lösbar).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp commands   { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| desired-temp soll per dropDown einstellbar sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp nameStyle style=&amp;quot;color:yellow&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;amp;deg;C&amp;quot;,&#039;ToutIst&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;night-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;day-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;humidity&#039; =&amp;gt; &amp;quot;%.0f &lt;br /&gt;
%%&amp;quot;,&#039;ValvePosition&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;ValveDesired&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;R-valveErrorPos&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Werte. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#namen des ventil device aus thermostat device ableiten&lt;br /&gt;
sub valveOfDevice ($) {&lt;br /&gt;
  my ($DEVICE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  if ($DEVICE =~ m/AZ/) {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11).&amp;quot;.Nord&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11);  	&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hier wird aus dem Namen des Thermostaten der Name des zugehörigen Ventilantriebs abgeleitet.&lt;br /&gt;
|}&lt;br /&gt;
Da im {...} Teil des &amp;lt;reading&amp;gt;@&amp;lt;device&amp;gt; Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist er in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern. Mit ein paar &#039;Tricks&#039; lässt es sich aber manchmal auch ohne Leerzeichen oder Kommas lösen und dann direkt in die Definition schreiben:&amp;lt;code&amp;gt;...,ValvePosition@{$DEVICE=~s/Thermostat/Ventil/;$DEVICE;},...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte filtern ===&lt;br /&gt;
Wenn man gewisse Zeilen einer Readingsgroup nicht dargestellt haben möchte, so kann man diese mit Hilfe von &amp;lt;code&amp;gt;valueFormat&amp;lt;/code&amp;gt; ausfiltern, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr rg valueFormat { return $VALUE if ( $VALUE &amp;gt; 0 );; return undef;; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Bsp. werden alle Zeilen/Devices, deren Value &amp;gt; 0 sind, angezeigt. Alle anderen werden als &amp;lt;code&amp;gt;undef&amp;lt;/code&amp;gt; formatiert und erscheinen damit nicht im Listing.&lt;br /&gt;
&lt;br /&gt;
Dies kann man noch weiter ausbauen und dynamische Auswahllisten erstellen (s. [[ReadingsGroup#Dynamische Inhalte]]).&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Inhalte ===&lt;br /&gt;
[[Datei:rgDynamic-1.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 1]]&lt;br /&gt;
[[Datei:rgDynamic-2.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 2]]&lt;br /&gt;
Es ist möglich, den in einer readingsGroup dargestellten Inhalt dynamisch von zusätzlichen Bedingungen abhängig zu machen. Im folgenden Beispiel lässt sich&lt;br /&gt;
einstellen, dass nur die Devices angezeigt werden, die einen bestimmten Zustand (hier: on/off, open/tilted/closed) haben. Hier wird zum Umschalten ein dummy, der direkt über der readingsGroup dargestellt wird, verwendet. Über das links und/oder commands lässt sich auch eine Darstellung erzeugen, bei der das Umschalten direkt innerhalb der readingsGroup möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LXrg dummy&lt;br /&gt;
attr LXrg group -&lt;br /&gt;
attr LXrg setList mode1:on,off mode2:open,closed,tilted&lt;br /&gt;
attr LXrg stateFormat 1=mode1 2=mode2&lt;br /&gt;
attr LXrg webCmd mode1:mode2&lt;br /&gt;
&lt;br /&gt;
define rg readingsGroup Window.*:state Light.*:state&lt;br /&gt;
attr rg group -&lt;br /&gt;
attr rg valueFormat { return $VALUE if ( $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode1&amp;quot;,&amp;quot;&amp;quot;) || $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode2&amp;quot;,&amp;quot;&amp;quot;) );; return undef;;}&lt;br /&gt;
&lt;br /&gt;
define Watch_LX notify LX.*:.* {my $value = ReadingsVal($NAME,&#039;state&#039;,&#039;&#039;);;;;fhem(&amp;quot;setreading $NAME $value&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable/Disable Button am Beispiel eines WeekdayTimer ===&lt;br /&gt;
Dieses Beispiel zeigt die Anwendung einer readingsGroup, um im Frontend einen Enable/Disable Button für ein Objekt darzustellen. Für den [[WeekdayTimer]] gibt es hier spezielle Erweiterungen (set Routinen, um das Attribut &#039;&#039;disable&#039;&#039; zu setzen). Es gibt aber auch eine allgemeinere Variante (siehe [http://forum.fhem.de/index.php/topic,23655.msg169141.html#msg169141 diesen Forumsbeitrag]) für alle Objekte, die das Fhem Attribut &#039;&#039;disable&#039;&#039; unterstützen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_scheduling.png|thumb|500px|links|Enable/Disable Button]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_Timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextUpdate&amp;quot;)}@disabled&amp;gt;,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextValue&amp;quot;)}@disabled&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disabled&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button, +DEF zeigt die Definition, d.h. die Schaltzeiten, des Timers an. Die Readings nextUpdate und nextValue sollen nur angezeigt werden, falls der Timer aktiv ist. Hierfür sorgt eine Routine &amp;lt;code&amp;gt;rg_timer_Wasser_show_conditional&amp;lt;/code&amp;gt;, die in der 99_myUtils.pm definiert wird. Das abschließende @disabled sorgt dafür, dass der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueFormat  { if ( $READING =~ m/.*DEF/ ) { my @text = split(&amp;quot; &amp;quot;, $VALUE); shift @text; return join(&amp;quot; &amp;quot;, @text) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Name des Timers wird aus dem Internal &amp;quot;+DEF&amp;quot; vorne abgeschnitten. Damit werden nur die definierten Schaltpunkte angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueIcon { &#039;disabled.0&#039; =&amp;gt; &#039;Restart&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;Shutdown&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die beiden Zustände für den Button werden durch zwei Standard-Icons angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser commands  { &#039;disabled.0&#039; =&amp;gt; &#039;set $DEVICE disable&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;set $DEVICE enable&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle-Funktion für den Button. Wenn der Timer aktiv (&amp;quot;disabled.0&amp;quot;) sorgt ein Klick auf den Button, dass der Timer deaktiviert wird (&amp;quot;set $DEVICE disable&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg_timer_Wasser_show_conditional($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING) = @_;&lt;br /&gt;
  return ( ReadingsVal($DEVICE, &amp;quot;disabled&amp;quot;, &amp;quot;1&amp;quot;) eq &amp;quot;0&amp;quot; )? &lt;br /&gt;
     ReadingsVal($DEVICE, $READING, &amp;quot;reading_undef&amp;quot;) : &amp;quot;disabled&amp;quot;;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String &amp;quot;disabled&amp;quot; angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ändern von Attributen: Noch ein WeekdayTimer Beispiel ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Inzwischen ist es auch möglich das commands Mapping auf Attribute anzuwenden. Die Syntax ist die gleiche wie für die set Kommandos. Um das Beispiel übersichtlich zu halten werden hier die Werte und Icons auch für deaktiviert WeekdayTimer angezeigt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_timer.png|thumb|500px|links|FhemWidget für das &#039;disable&#039; Attribut]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rgTimer readingsGroup &amp;lt;&amp;gt;,&amp;lt;Current&amp;gt;,&amp;lt;Update-Time&amp;gt;,&amp;lt;New&amp;gt;,&amp;lt;disable&amp;gt; TYPE=WeekdayTimer:state,nextUpdate,nextValue,?!disable&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disable&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button. Durch das ! wird das Attribut auch dann angezeigt wenn es noch nicht gesetzt ist.   &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueIcon { state =&amp;gt; &#039;%devStateIcon&#039;, nextValue =&amp;gt; &#039;{(split(&amp;quot;:&amp;quot;,Color::devStateIcon($DEVICE,&amp;quot;dimmer&amp;quot;,undef,&amp;quot;nextValue&amp;quot;)))[1]}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den aktuellen Zustand wird das devStateIcon angezeigt und für den nächsten Zustand das passende Lampen-Icon.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueFormat  &#039;{(split(&amp;quot; &amp;quot;, $VALUE))[1]}&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Vom nächsten Schaltpunkt wird nur die Zeit angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer commands  { disable =&amp;gt; &#039;disable:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für das disable attribut wird das normale dropDown mit 0 und 1 angezeigt das auch in der Device Detail Ansicht verwendet wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings löschen ===&lt;br /&gt;
Es kann vorkommen, dass Readings angezeigt werden, die garnicht existieren sollten - bspw. wenn man in einer HTTPMOD ein Reading umbeannt hat, kann auch der alte Readingsname immernoch angezeigt werden. Solche Readings können mit der globalen Funktion [http://fhem.de/commandref.html#deletereading deletereading] gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf jeden Fall die [http://fhem.de/commandref.html#deletereading CommandRef dazu] lesen!&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Im HTTPMOD des [[Pollenflug]] war zuerst das &amp;lt;code&amp;gt;reading04Name Graeser&amp;lt;/code&amp;gt; definiert und wurde später in &amp;lt;code&amp;gt;reading04Name Gräser&amp;lt;/code&amp;gt; umbenannt. In der zugehörigen ReadingGroup wurden dann konsequent beide Varianten dargestellt - auch nachdem alle Alt-Einträge aus den Logs entfernt wurden. Erst ein &amp;lt;code&amp;gt;deletereading Pollenflug Graeser&amp;lt;/code&amp;gt; in der fhem-Befehltszeile hat das veraltete Reading entfernt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ausrichtung der Tabelle drehen (horizontal/vertikal) ===&lt;br /&gt;
Eine Readingsgroup wird standardmäßig immer zeilenweise aufgebaut, zB. jedes Gerät in eine neue Zeile. Die Werte der Geräte werden dann in den Spalten dargestellt. &lt;br /&gt;
Wenn man eine Readingsgroup für nur ein Gerät mit vielen Readings hat (zB. [[Allergy]]), so kann man die Darstellung horizontal oder vertikal ausrichten, indem man die Readingsgroup detailliert definiert. Ein Bsp. dazu liefert der Foreneintrag [https://forum.fhem.de/index.php/topic,37194.msg440446.html#msg440446] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Pollenflugvorhersage allergy &amp;lt;PLZ&amp;gt;&lt;br /&gt;
attr Pollenflugvorhersage levelsFormat rc_dot@white,rc_dot@yellow,rc_dot@orange,rc_dot@red&lt;br /&gt;
attr Pollenflugvorhersage stateFormat fc1_maximum&lt;br /&gt;
attr Pollenflugvorhersage updateEmpty 1&lt;br /&gt;
attr Pollenflugvorhersage updateIgnored 1&lt;br /&gt;
&lt;br /&gt;
# Pollen in Spalten, Tage in Zeilen&lt;br /&gt;
define PollenAlarmHorizontal readingsGroup &amp;lt;&amp;gt;,&amp;lt;Ampfer&amp;gt;,&amp;lt;Ambrosia&amp;gt;,&amp;lt;Beifuß&amp;gt;,&amp;lt;Birke&amp;gt;,&amp;lt;Buche&amp;gt;,&amp;lt;Eiche&amp;gt;,&amp;lt;Erle&amp;gt;,&amp;lt;Gräser&amp;gt;,&amp;lt;Hasel&amp;gt;,&amp;lt;Pappel&amp;gt;,&amp;lt;Roggen&amp;gt;,&amp;lt;Ulme&amp;gt;,&amp;lt;Wegerich&amp;gt;,&amp;lt;Weide&amp;gt; \&lt;br /&gt;
Pollenflugvorhersage:fc1_day_of_week,fc1_Ampfer,fc1_Ambrosia,fc1_Beifuß,fc1_Birke,fc1_Buche,fc1_Eiche,fc1_Erle,fc1_Gräser,fc1_Hasel,fc1_Pappel,fc1_Roggen,fc1_Ulme,fc1_Wegerich,fc1_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc2_day_of_week,fc2_Ampfer,fc2_Ambrosia,fc2_Beifuß,fc2_Birke,fc2_Buche,fc2_Eiche,fc2_Erle,fc2_Gräser,fc2_Hasel,fc2_Pappel,fc2_Roggen,fc2_Ulme,fc2_Wegerich,fc2_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc3_day_of_week,fc3_Ampfer,fc3_Ambrosia,fc3_Beifuß,fc3_Birke,fc3_Buche,fc3_Eiche,fc3_Erle,fc3_Gräser,fc3_Hasel,fc3_Pappel,fc3_Roggen,fc3_Ulme,fc3_Wegerich,fc3_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc4_day_of_week,fc4_Ampfer,fc4_Ambrosia,fc4_Beifuß,fc4_Birke,fc4_Buche,fc4_Eiche,fc4_Erle,fc4_Gräser,fc4_Hasel,fc4_Pappel,fc4_Roggen,fc4_Ulme,fc4_Wegerich,fc4_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc5_day_of_week,fc5_Ampfer,fc5_Ambrosia,fc5_Beifuß,fc5_Birke,fc5_Buche,fc5_Eiche,fc5_Erle,fc5_Gräser,fc5_Hasel,fc5_Pappel,fc5_Roggen,fc5_Ulme,fc5_Wegerich,fc5_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc6_day_of_week,fc6_Ampfer,fc6_Ambrosia,fc6_Beifuß,fc6_Birke,fc6_Buche,fc6_Eiche,fc6_Erle,fc6_Gräser,fc6_Hasel,fc6_Pappel,fc6_Roggen,fc6_Ulme,fc6_Wegerich,fc6_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc7_day_of_week,fc7_Ampfer,fc7_Ambrosia,fc7_Beifuß,fc7_Birke,fc7_Buche,fc7_Eiche,fc7_Erle,fc7_Gräser,fc7_Hasel,fc7_Pappel,fc7_Roggen,fc7_Ulme,fc7_Wegerich,fc7_Weide&lt;br /&gt;
attr PollenAlarm nonames 1&lt;br /&gt;
attr PollenAlarm valueFormat %VALUE&lt;br /&gt;
attr PollenAlarm valueIcon %VALUE&lt;br /&gt;
&lt;br /&gt;
# Tage in Spalten, Pollen in Zeilen&lt;br /&gt;
define PollenAlarmVertikal readingsGroup Pollenflugvorhersage:&amp;lt;Pollen&amp;gt;,fc0_day_of_week,fc1_day_of_week,fc2_day_of_week,fc3_day_of_week,fc4_day_of_week,fc5_day_of_week,fc6_day_of_week,fc7_day_of_week \&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ambrosia&amp;gt;,fc0_Ambrosia,fc1_Ambrosia,fc2_Ambrosia,fc3_Ambrosia,fc4_Ambrosia,fc5_Ambrosia,fc6_Ambrosia,fc7_Ambrosia\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ampfer&amp;gt;,fc0_Ampfer,fc1_Ampfer,fc2_Ampfer,fc3_Ampfer,fc4_Ampfer,fc5_Ampfer,fc6_Ampfer,fc7_Ampfer\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Beifuß&amp;gt;,fc0_Beifuss,fc1_Beifuss,fc2_Beifuss,fc3_Beifuss,fc4_Beifuss,fc5_Beifuss,fc6_Beifuss,fc7_Beifuss\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Birke&amp;lt;Birke&amp;lt;/b&amp;gt;&amp;gt;,fc0_Birke,fc1_Birke,fc2_Birke,fc3_Birke,fc4_Birke,fc5_Birke,fc6_Birke,fc7_Birke\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Buche&amp;gt;,fc0_Buche,fc1_Buche,fc2_Buche,fc3_Buche,fc4_Buche,fc5_Buche,fc6_Buche,fc7_Buche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Eiche&amp;gt;,fc0_Eiche,fc1_Eiche,fc2_Eiche,fc3_Eiche,fc4_Eiche,fc5_Eiche,fc6_Eiche,fc7_Eiche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Erle&amp;lt;Erle&amp;lt;/b&amp;gt;&amp;gt;,fc0_Erle,fc1_Erle,fc2_Erle,fc3_Erle,fc4_Erle,fc5_Erle,fc6_Erle,fc7_Erle\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Gräser&amp;gt;,fc0_Graeser,fc1_Graeser,fc2_Graeser,fc3_Graeser,fc4_Graeser,fc5_Graeser,fc6_Graeser,fc7_Graeser\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Hasel&amp;lt;Hasel&amp;lt;/b&amp;gt;&amp;gt;,fc0_Hasel,fc1_Hasel,fc2_Hasel,fc3_Hasel,fc4_Hasel,fc5_Hasel,fc6_Hasel,fc7_Hasel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Pappel&amp;gt;,fc0_Pappel,fc1_Pappel,fc2_Pappel,fc3_Pappel,fc4_Pappel,fc5_Pappel,fc6_Pappel,fc7_Pappel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Roggen&amp;gt;,fc0_Roggen,fc1_Roggen,fc2_Roggen,fc3_Roggen,fc4_Roggen,fc5_Roggen,fc6_Roggen,fc7_Roggen\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ulme&amp;gt;,fc0_Ulme,fc1_Ulme,fc2_Ulme,fc3_Ulme,fc4_Ulme,fc5_Ulme,fc6_Ulme,fc7_Ulme\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Wegerich&amp;gt;,fc0_Wegerich,fc1_Wegerich,fc2_Ulme,fc3_Wegerich,fc4_Wegerich,fc5_Wegerich,fc6_Wegerich,fc7_Wegerich\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Weide&amp;gt;,fc0_Weide,fc1_Weide,fc2_Weide,fc3_Weide,fc4_Weide,fc5_Weide,fc6_Weide,fc7_Weide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Berechnungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Das Rechnen funktioniert über das Flag &amp;quot;$&amp;quot;, mit dem eine Funktion angegeben werden kann, die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define rg readingsGroup .*:temperature rg:$avg&amp;lt;/code&amp;gt;&lt;br /&gt;
Damit wird eine readingsGroup über alle &#039;&#039;temperature&#039;&#039; Readings definiert. In einer zusätzlichen Zeile am Ende wird mit &#039;&#039;$avg&#039;&#039; der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.&lt;br /&gt;
&lt;br /&gt;
Das genaue Format: &amp;lt;code&amp;gt;$&amp;lt;operator&amp;gt;[(&amp;lt;zellen&amp;gt;)]&amp;lt;/code&amp;gt; mit&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;operator&amp;gt;&amp;lt;/code&amp;gt;: sum, avg, min, max, scalar, count oder der Name einer beliebigen anderen Funktion, die ein Array mit allen Werten übergeben bekommt und ein Ergebnis zurückliefert.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zellen&amp;gt;&amp;lt;/code&amp;gt; ist eine durch Semikolon getrennte Liste aus &amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;:&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; Paaren. &lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; sind jeweils eine Perl Liste, d.h. hier können &lt;br /&gt;
** einzelne Werte,&lt;br /&gt;
** durch Komma getrennte Aufzählungen,&lt;br /&gt;
** mit .. angegebene Wertebereiche&lt;br /&gt;
** sowie &amp;lt;code&amp;gt;$ROW&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$COLUMN&amp;lt;/code&amp;gt; als Bezeichner für die aktuelle Zelle&lt;br /&gt;
:verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.&lt;br /&gt;
&lt;br /&gt;
Es ergeben sich somit unter anderem folgende Möglichkeiten:&lt;br /&gt;
*&amp;lt;code&amp;gt;$sum&amp;lt;/code&amp;gt; equivalent zu &amp;lt;code&amp;gt;$sum(1..$ROW), $sum(:$COLUMN)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$sum(1..$ROW:$COLUMN)&amp;lt;/code&amp;gt; die Summe der Werte in der Spalte über der aktuellen Zelle.&lt;br /&gt;
*&amp;lt;code&amp;gt;$max($ROW:1..$COLUMN-1)&amp;lt;/code&amp;gt; Maximum aller Werte links von der aktuellen Zelle (in der aktuellen Zeile)&lt;br /&gt;
*&amp;lt;code&amp;gt;$avg(1..$ROW:1)&amp;lt;/code&amp;gt; Durchschnitt aller Werte in Spalte 1 bis zur aktuellen Zeile&lt;br /&gt;
*&amp;lt;code&amp;gt;$scalar(:1)&amp;lt;/code&amp;gt; Anzahl der Werte in Spalte 1&lt;br /&gt;
*&amp;lt;code&amp;gt;$min(1..5:1,2,4)&amp;lt;/code&amp;gt; Minimum der Werte aus den Zeilen 1-5 in den Spalten 1, 2 und 4&lt;br /&gt;
&lt;br /&gt;
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.B. verwenden um Häufigkeiten zu zählen oder mit nichtnumerischen Readings umzugehen.&lt;br /&gt;
&lt;br /&gt;
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.B. einfärben, als Balkendiagramm darstellen, ...&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Funktionalität zum auf- und zu-klappen von Teilen einer readingsGroup lassen sich z.B. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten:&lt;br /&gt;
* Attribut &amp;lt;code&amp;gt;firstCalcRow&amp;lt;/code&amp;gt;: Hiermit kann der Default für die Nummer der ersten Zeile vorgegeben werden (sofern im Ausdruck nichts genaueres angegeben ist). firstCalcRow sollte z.B. auf 2 gesetzt werden, wenn in der readingsGroup Spaltenüberschriften verwendet werden.&lt;br /&gt;
* special &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; um eine horizontale Linie über die volle Breite einzufügen&lt;br /&gt;
* Über ein angehängtes &amp;lt;code&amp;gt;@&amp;lt;alias&amp;gt;&amp;lt;/code&amp;gt; kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesen kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.&lt;br /&gt;
* das &amp;lt;code&amp;gt;alwaysTrigger&amp;lt;/code&amp;gt; Attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.&lt;br /&gt;
* Über den operator &amp;lt;code&amp;gt;$count(&amp;lt;wert&amp;gt;)(&amp;lt;zellen&amp;gt;)&amp;lt;/code&amp;gt; um das Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; in den angegebenen Zellen zu zählen. &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit &amp;lt;code&amp;gt;!&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann das Nicht-Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; gezählt werden.&lt;br /&gt;
&lt;br /&gt;
=== Ein interaktives Beispiel ===&lt;br /&gt;
[[Datei:rgCalc.png|mini|right|400px|Beispiel-readingsGroup mit Berechnungen]]&lt;br /&gt;
In drei [[dummy]] Objekten lässt sich jeweils ein Reading über einen Slider einstellen. In der darunter liegenden readingsGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert, wenn die slider bewegt werden.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  define t1 dummy&lt;br /&gt;
  attr t1 room rg&lt;br /&gt;
  attr t1 setList state:slider,-10,1,30&lt;br /&gt;
  attr t1 webCmd state&lt;br /&gt;
  define t2 dummy&lt;br /&gt;
  attr t2 room rg&lt;br /&gt;
  attr t2 setList state:slider,-10,1,30&lt;br /&gt;
  attr t2 webCmd state&lt;br /&gt;
  define t3 dummy&lt;br /&gt;
  attr t3 room rg&lt;br /&gt;
  attr t3 setList state:slider,-10,1,30&lt;br /&gt;
  attr t3 webCmd state&lt;br /&gt;
&lt;br /&gt;
  define rg readingsGroup &amp;lt;&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;sum&amp;gt;,&amp;lt;min&amp;gt;,&amp;lt;max&amp;gt;,&amp;lt;avg&amp;gt;\&lt;br /&gt;
  t\d:+NAME,state,$sum(1..$ROW:2),$min(1..$ROW:2),$max(1..$ROW:2),$avg(1..$ROW:2)\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  rg:&amp;lt;&amp;gt;,$scalar,$sum(:2)@SUM,$min(:2)@MIN,$max(:2)@MAX,$avg(:2)@AVG\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  t1:&amp;lt;t1,t2,t3&amp;gt;,state,state@t2,state@t3,$sum($ROW:2..4)@SUM,$count(/\d/)(2..$ROW-4:2)\&lt;br /&gt;
 &lt;br /&gt;
  attr rg nonames 1&lt;br /&gt;
  attr rg room rg&lt;br /&gt;
  attr rg style style=&#039;text-align:center&#039;&lt;br /&gt;
  attr rg valueFormat { &#039;avg&#039; =&amp;gt; &#039;%.2f&#039;, &#039;AVG&#039; =&amp;gt; &#039;%.2f&#039; }&lt;br /&gt;
  attr rg valuePrefix { &#039;rg.scalar&#039; =&amp;gt; &#039;#&#039;, &#039;rg.SUM&#039; =&amp;gt;&#039;&amp;amp;Sigma;; &#039;, &#039;rg.MIN&#039; =&amp;gt;&#039;Min: &#039;, &#039;rg.MAX&#039; =&amp;gt;&#039;Max: &#039;, &#039;rg.AVG&#039; =&amp;gt;&#039;&amp;amp;empty;; &#039;, &#039;rg.count&#039; =&amp;gt; &#039;#(X): &#039; }&lt;br /&gt;
  attr rg valueSuffix { state =&amp;gt; &#039;&amp;amp;deg;;C&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links und Trigger ==&lt;br /&gt;
=== readingsGroup mit Link ===&lt;br /&gt;
[[Datei:rgPCA-detail.png|mini|400px|readingsGroup mit Link]]&lt;br /&gt;
Das PCA301 Beispiel oben lässt sich mit einem ans Ende des define angehängten &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;{appendTrigger($DEVICE,&amp;quot;clear&amp;quot;,&amp;quot;Alle löschen&amp;quot;)}&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
und der folgenden appendTrigger Definition in 99_myUtils.pm um einen Link erweitern, der ein Event auslöst, an das z.B. ein notify gehängt werden kann, um die Verbrauchszähler der PCA301 Dosen zurückzusetzen. &lt;br /&gt;
:&amp;lt;code&amp;gt;define clearVerbrauch notify Verbrauch:clear set TYPE=PCA301 clear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use vars qw($FW_ME);&lt;br /&gt;
use vars qw($FW_subdir);&lt;br /&gt;
sub&lt;br /&gt;
appendTrigger($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($name,$trigger,$label) = @_; &lt;br /&gt;
&lt;br /&gt;
  my $ret .= &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my $link = &amp;quot;cmd=trigger $name $trigger&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;lt;a onClick=\&amp;quot;FW_cmd(&#039;$FW_ME$FW_subdir?XHR=1&amp;amp;$link&#039;)\&amp;quot;&amp;gt;$label&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;&amp;lt;td colspan=\&amp;quot;99\&amp;quot;&amp;gt;&amp;lt;div style=\&amp;quot;cursor:pointer;color:#888888;text-align:right\&amp;quot;&amp;gt;$txt&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  return ($ret,0);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wenn hierdurch Änderungen an einer readingsGroup erfolgen, die ein Neuladen der Seite erforderlich machen, kann dies so erfolgen:&lt;br /&gt;
:&amp;lt;code&amp;gt;{myUtils_refresh(&amp;quot;WEB&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
mit folgendem code in 99_myUtils.pm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub                                                                                     &lt;br /&gt;
myUtils_refresh($)                                                                      &lt;br /&gt;
{                                                                                       &lt;br /&gt;
  my ($name) = @_;                                                                      &lt;br /&gt;
                                                                                        &lt;br /&gt;
  FW_directNotify(&amp;quot;#FHEMWEB:$name&amp;quot;, &amp;quot;location.reload(true);&amp;quot;,&amp;quot;&amp;quot; );&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für &#039;custom links und trigger&#039; findet sich in {{Link2Forum|Topic=14425|Message=109383|LinkText=diesem Forenbeitrag}}: dort wird damit eine readingsGroup dynamisch umgeschaltet, um nur die eingeschalteten, nur die ausgeschalteten oder alle Lampen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
=== sub rg ===&lt;br /&gt;
Damit beim klicken auf ein Icon oder einen Text in einer readingsGroup etwas passiert ist es möglich dies über das commands Attribut auf ein &amp;lt;code&amp;gt;&#039;trigger ntfy_rg $DEVICE $READING&#039;&amp;lt;/code&amp;gt; oder Ähnliches zu mappen.&lt;br /&gt;
Anlegen des ntfy_rg notify&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ntfy_rg notify ntfy_rg {rg($EVENT)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Folgender Code muss noch in de [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg($){&lt;br /&gt;
  my @input    = split(/[§\s]+/,shift);&lt;br /&gt;
  my $device   = $input[0];&lt;br /&gt;
  my $function = $input[1];&lt;br /&gt;
&lt;br /&gt;
if($function eq &amp;quot;clima&amp;quot;){&lt;br /&gt;
  my $room =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room =~ s/\D//g;&lt;br /&gt;
  &lt;br /&gt;
  return((&amp;quot;d_climaControl_&amp;quot;.$room));&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;device&amp;quot;){&lt;br /&gt;
  return InternalVal($device,&amp;quot;device&amp;quot;,&amp;quot;device error&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;controlMode&amp;quot;){&lt;br /&gt;
  my $controlMode = ReadingsVal($device,&amp;quot;controlMode&amp;quot;,&amp;quot;controlMode error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($controlMode ~~ /manual/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode auto&amp;quot;)}&lt;br /&gt;
  elsif($controlMode ~~ /auto/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode manual&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;globalBtnLock&amp;quot;){&lt;br /&gt;
  my $globalBtnLock = ReadingsVal($device,&amp;quot;R-globalBtnLock&amp;quot;,&amp;quot;globalBtnLock error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($globalBtnLock ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock on&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($globalBtnLock ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock off&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;state&amp;quot;){&lt;br /&gt;
  my $state = Value($device);&lt;br /&gt;
&lt;br /&gt;
  if($state ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device on&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($state ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device off&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;setTimeTable&amp;quot;){&lt;br /&gt;
  my $room         =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room         =~ s/\D//g;&lt;br /&gt;
  my $climaControl = (&amp;quot;d_climaControl_&amp;quot;.$room);&lt;br /&gt;
  my $dayTemp           = ReadingsVal( $climaControl, &amp;quot;dayTemp&amp;quot;          , 21.0    );&lt;br /&gt;
  my $nightTemp         = ReadingsVal( $climaControl, &amp;quot;nightTemp&amp;quot;        , 17.0    );&lt;br /&gt;
  my $workday_period_1_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_1_start&amp;quot;  , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $workday_period_1_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_1_stop&amp;quot;   , &amp;quot;18:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_2_start&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_2_stop&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_start&amp;quot; , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_stop&amp;quot;  , &amp;quot;12:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_start&amp;quot; , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_stop&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
In der Regel werden die Parameter zu einem reading in den mappings unter &amp;lt;$DEVICE&amp;gt; und dann &amp;lt;$DEVICE&amp;gt;.&amp;lt;$READING&amp;gt; und dann unter &amp;lt;$READING&amp;gt;.&amp;lt;$VALUE&amp;gt; gesucht.&lt;br /&gt;
&lt;br /&gt;
=== Lesbar machen ===&lt;br /&gt;
Für die meisten Attribute gilt:&lt;br /&gt;
&lt;br /&gt;
* Wenn es komplexer wird ist es einfacher, den Code in eine eigene Routine in (beispielsweise) [[99 myUtils anlegen|99_myUtils]] auszulagern und diese aufzurufen:&lt;br /&gt;
:&amp;lt;code&amp;gt; attr &amp;lt;name&amp;gt; valueStyle {myValueToFormat($READING,$VALUE)}&amp;lt;/code&amp;gt;&lt;br /&gt;
* code für unterschiedliche readings kann auch im mapping schon aufgeteilt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; valueStyle { SuperE5 =&amp;gt; &#039;{perl code}&#039;, Diesel =&amp;gt; &#039;{perl code}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ifs lassen sich verschachteln und sortieren. So kann die Anzahl der Klammern und Else-Zweige reduziert werden:&lt;br /&gt;
 if( $READING eq ... ) {&lt;br /&gt;
   return xxx if( $VALUE &amp;lt; 1 );&lt;br /&gt;
   return yyy if( $VALUE &amp;lt; 1.5 );&lt;br /&gt;
   return zzz;&lt;br /&gt;
 } elsif( $READING eq ... ) {&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da alles lässt sich natürlich auch kombinieren und so viel lesbarer machen als ein einziger langer Bandwurm.&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup in einer Gruppe ===&lt;br /&gt;
Wenn der doppelte Rahmen um eine readingsGroup bei Darstellung in einer Gruppe stört, lässt er sich mit dem passenden style entfernen: &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style style=&amp;quot;border:0px;background:none;box-shadow:none&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
Für die readingsGroup &#039;&#039;rgName&#039;&#039; wird der Darstellungsstil verändert.&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache Balkendiagramme ===&lt;br /&gt;
[[Datei:rgBars.png|mini|400px|readingsGroup mit Balken]]&lt;br /&gt;
Readings lassen sich mit einem valueStyle der folgenden Art mit einem &amp;quot;Füllstandsbalken&amp;quot; hinterlegen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; valueStyle style=&amp;quot;width:200px; text-align:center; border: 1px solid #ccc; background:-webkit-linear-gradient(left, red $VALUE%, rgba(0,0,0,0) $VALUE%)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Balken werden bei Änderungen der Readings automatisch per longpoll aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Diese direkte Definition des &amp;lt;code&amp;gt;valueStyle&amp;lt;/code&amp;gt; ist allerdings sehr unflexibel - bspw. müsste der &amp;lt;code&amp;gt;$VALUE&amp;lt;/code&amp;gt; zufällig max 100 erreichen und es darf nur ein Browsertyp eingesetzt werden, damit alles sauber funktioniert. &lt;br /&gt;
&lt;br /&gt;
Deutlich flexibler ist eine Auslagerung als eigenständige Funktion in die [[99_myUtils_anlegen|99_myUtils.pm]], die den valueStyle dynamisch generiert, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub Balkenanzeige($) &lt;br /&gt;
{&lt;br /&gt;
    # Zuweisung der übergebenen Variablen&lt;br /&gt;
    my ($val) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 3)&lt;br /&gt;
    my $maxValue = 3;&lt;br /&gt;
&lt;br /&gt;
    # Normalisierung auf 100%-Wert&lt;br /&gt;
    my $percent = $val / $maxValue * 100;&lt;br /&gt;
&lt;br /&gt;
    # Definition des valueStyles&lt;br /&gt;
    my $stylestring = &#039;style=&amp;quot;&lt;br /&gt;
        width: 200px; &lt;br /&gt;
	text-align:center; &lt;br /&gt;
	border: 1px solid #ccc; &lt;br /&gt;
	background-image: -webkit-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:    -moz-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:     -ms-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:      -o-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:         linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%);&lt;br /&gt;
	&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
    # Rückgabe des definierten Strings&lt;br /&gt;
    return $stylestring;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf sähe dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; attr &amp;lt;rgName&amp;gt; valueStyle { Balkenanzeige($VALUE) } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Werte des &amp;lt;code&amp;gt;$stylestring&amp;lt;/code&amp;gt; haben folgende Bedeutungen:&lt;br /&gt;
* width      - Breite des Balkenrahmens&lt;br /&gt;
* text-align - Ausrichtung des Texts&lt;br /&gt;
* border     - Format des Balkenrahmens&lt;br /&gt;
* background-image - Format des Hintergrunds des Balkenrahmens, also des Balkens selbst&lt;br /&gt;
** linear-gradient - css-Funktion zur Erstellung von Farbverläufen &#039;&#039;(*)&#039;&#039;&lt;br /&gt;
*** left             - linksbündiger Balken&lt;br /&gt;
*** red x%           - roter Balken x% breit&lt;br /&gt;
*** rgba(0,0,0,0) x% - farbloser Teil startet bei x%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(*) linear-gradient wird in verschiedenen Browsern unterschiedlich umgesetzt. Deshalb sollten immer alle Varianten zusammen angegeben werden, damit die Darstellung auf allen Browsern funktioniert. (vgl. Link unten)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zu:&lt;br /&gt;
* linear-gradient - [https://developer.mozilla.org/de/docs/Web/CSS/linear-gradient]&lt;br /&gt;
* Farbanpassungen, z.B. auch unter Verwendung der [[Color#Skalenfarbe_mit_Color::pahColor|Color::pahColor]] Routine.&lt;br /&gt;
* Anpassung von Werten s.o. [[ReadingsGroup#Lesbar_machen]]&lt;br /&gt;
* weiteren Möglichkeiten zur Erzeugung von Balkendiagrammen in Forenbeiträgen {{Link2Forum|Topic=25313|LinkText=hier}} und {{Link2Forum|Topic=28318|LinkText=hier}}&lt;br /&gt;
* [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup Styling mit CSS ===&lt;br /&gt;
Jede readingsGroup lässt sich durch CSS individuell stylen. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
Damit der eigene CSS Code nach einem [[Update]] der FHEM-Style Dateien vorhanden bleibt, ist es notwenig eine eigene .css Datei (zB ios7ReadingsGroups.css) zu erstellen und ins Verzeichnis &#039;&#039;fhem/www/pgm2/&#039;&#039; zu kopieren. Anschließend muss in der [[FHEMWEB]] Instanz das Attribut &#039;&#039;CssFiles&#039;&#039; auf zB &#039;&#039;pgm2/ios7ReadingsGroups.css&#039;&#039; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Erweiterte Device Übersicht ====&lt;br /&gt;
Diese ReadingsGroup ist an der [[FHEMWEB]] Device-Übersicht angelehnt. Zusätzlich werden weitere Readings, hier Leistung, Betriebszeit Heute und Jahr, ein Link zu Detail-Seite der ReadingsGroup und Links zu den jeweiligen Device-Detail-Seite, dargestellt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Datei:RgStylingOhneCss.png|600px|mini|left|Device ReadingsGroup ohne CSS]] [[Datei:RgStylingMitCss.png|600px|mini|left|Device ReadingsGroup mit CSS]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Definition =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_devices readingsGroup &amp;lt;{rgLink($DEVICE,&amp;quot;konfigurieren&amp;quot;,&amp;quot;Details&amp;quot;)}&amp;gt;,&amp;lt;Device&amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt;Leistung&amp;gt;,&amp;lt;Heute&amp;gt;,&amp;lt;Jahr&amp;gt;\&lt;br /&gt;
wzDeckenfluter:&amp;lt;%light_floor_lamp&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzDeckenfluter&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;Deckenfluter&amp;quot;)}&amp;gt;,state,&amp;lt;&amp;gt;,dauerHeute,dauerJahr\&lt;br /&gt;
wzMacMini:&amp;lt;%it_nas&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzMacMini&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;MacMini&amp;quot;)}&amp;gt;,state,power,consumption,consumptionYear\&lt;br /&gt;
attr rg_devices noheading 1&lt;br /&gt;
attr rg_devices nonames 1&lt;br /&gt;
attr rg_devices notime 1&lt;br /&gt;
attr rg_devices room ReadingsGroup Styling&lt;br /&gt;
attr rg_devices style class=&amp;quot;block wide rgDevices&amp;quot;&lt;br /&gt;
attr rg_devices valueFormat { &#039;power&#039; =&amp;gt; &amp;quot;%.1f W &amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;, &#039;consumptionYear&#039; =&amp;gt; &amp;quot;%.2f kWh&amp;quot;  }&lt;br /&gt;
attr rg_devices valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sich der CSS auf die richtige readingsGroup bezieht, ist es nötigt &lt;br /&gt;
das Attribut &#039;&#039;style&#039;&#039; anzupassen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style class=&amp;quot;block wide rgDevices&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Klassen &#039;&#039;block&#039;&#039; und &#039;&#039;wide&#039;&#039; müssen eingetragen werden. Der Name der Nachfolgenden Klasse, hier &#039;&#039;rgDevices&#039;&#039;, ist frei wählbar.&lt;br /&gt;
|}&lt;br /&gt;
===== Funktion rgLink() =====&lt;br /&gt;
Die Funktion rgLink($name,$action,$label) liefert einen Link mit dem Namen $label zurück. Der Code gehört in die [[99 myUtils anlegen|99_myUtils.pm]].&lt;br /&gt;
* $name - Name des Device das aufgerufen werden soll &lt;br /&gt;
* $action - Aktion die Ausgeführt werden soll. &lt;br /&gt;
**&#039;&#039;konfigurieren&#039;&#039; erzeugt den kleinen &#039;&#039;Details&#039;&#039; Button links oben der einem zur Detail Seite der ReadingsGroup führt - nützlich wenn das ReadingsGroup-Attribut &#039;&#039;noheading&#039;&#039; gesetzt ist&lt;br /&gt;
** &#039;&#039;detail&#039;&#039; erzeugt einen Link zu Device-Detail Seite&lt;br /&gt;
* $label - Link-Name&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rgLink($$$){&lt;br /&gt;
  my ($name,$action,$label) = @_; &lt;br /&gt;
  my $link = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $fhemLink = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $divStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $aStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  # FHEM Variablen einbinden&lt;br /&gt;
  use vars qw($FW_ME);&lt;br /&gt;
  use vars qw($FW_subdir);&lt;br /&gt;
  use vars qw($FW_ss);&lt;br /&gt;
  use vars qw($FW_tp);&lt;br /&gt;
&lt;br /&gt;
  if( $action eq &amp;quot;konfigurieren&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;font-size:11px;padding-bottom:2px;padding-left:3px;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif( $action eq &amp;quot;detail&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;display:inline;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $link = &#039;&amp;lt;a onclick=&amp;quot;location.href=\&#039;&#039; . $FW_ME . $FW_subdir . &#039;?&#039; . $fhemLink . &#039;\&#039;&amp;quot; style=&amp;quot;&#039; . $aStyle . &#039;&amp;quot;&amp;gt;&#039; . $label . &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
  $txt  = &#039;&amp;lt;div style=&amp;quot;&#039; . $divStyle . &#039;&amp;quot;&amp;gt;&#039; . $link . &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  $ret  = &amp;quot;$txt&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Tipp&lt;br /&gt;
Verwende zum Bearbeiten der eigenen .css Dateien entweder den [[Konfiguration#Syntaxhervorhebung|Codemirror Editor]] oder einen eigenen Editor mit [http://de.wikipedia.org/wiki/Syntaxhervorhebung Syntax Highlighting] . Das hilft bei der Fehlersuche enorm. }}&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
Die eigene .css Datei erscheint in FHEM unter Edit-Files --&amp;gt; styles und kann direkt im FHEM-Editor oder mit eigenen Editor bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
ios7ReadingsGroups.css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*  Readings Groups Devices */&lt;br /&gt;
table.rgDevices tr td{ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2){ /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child{  /* 1. Spalte */ width: 45px; text-align: center; }&lt;br /&gt;
table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 33%;  text-align: left; }&lt;br /&gt;
table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auf Portrait / Landscape Modus des Smartphone unterscheiden ====&lt;br /&gt;
Dieses Beispiel ist an das obige Beispiel [[#Erweiterte_Device_.C3.9Cbersicht|Erweiterte Device Übersicht]] angelehnt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortrait.png|300px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscape.png|550px|mini|center|Device ReadingsGroup im Landscape Modus]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
Mit CSS ist man in der Lage auf die aktuelle Bildschirmlage zu reagieren. Alle Anweisungen die in diesen beiden Funktionen zwischen den beiden { } stehen, werden je nach Bildschirmlage aufgerufen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) { }&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
{{Randnotiz|RNText=Info&lt;br /&gt;
* &#039;&#039;width: xx%&#039;&#039; ändert die Breite der Spalte&lt;br /&gt;
* &#039;&#039;display: none&#039;&#039; blendet die Spalte aus}}&lt;br /&gt;
In der FHEMWEB_phone Instanz muss wie [[#Allgemeines|hier]] beschrieben eine neue eigene .css Datei eingetragen werden. In diesem Beispiel ios7smallscreenReadingsGroups.css&lt;br /&gt;
&lt;br /&gt;
ios7smallscreenReadingsGroups.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* landscape und portrait modus */&lt;br /&gt;
table.rgDevices tr td { /* Zuerst alles centern */ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(1){ /* 1. Zeile 1. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child { /* 1. Spalte */ width: 5%; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2) { /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.block table tr td table.rgDevices tr td { border-bottom: 1px solid #cbcbcb; }&lt;br /&gt;
&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 50%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: auto; text-align: right; display: table-cell; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(6){ width: 0; display: none; }	&lt;br /&gt;
  table.rgDevices tr td div a svg{ margin-left: 90px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { &lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 35%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plots im Portrait Modus des Smartphones ausblenden ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortraitPlot.png|350px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscapePlot.PNG|550px|mini|center|Plot nur im Landscape]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um die Plot und alle Steuerelemente im Portrait Modus auszublenden fügt man in seine eigene smallscreen.css wie [[#Allgemeines|hier beschrieben]] folgendes ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  .SVGplot, .SVGlabel, .Zoom-in, .Zoom-out, .Prev { width: 0; display: none; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16739</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16739"/>
		<updated>2016-10-23T10:17:29Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Ergänzung der Typbezeichnung MVA-002; redaktionelle Nachbesserungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt iRTV MVA-002-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Durch einmaliges Drücken des Tasters&#039;&#039;&#039; kann man im Alltagsbetrieb eine Funkkommunikation außerhalb der Reihe auslösen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.}}&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; &amp;lt;setter&amp;gt; &amp;lt;wert&amp;gt; ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne MVA-002-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||MVA-002 hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom MVA-002 nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||MVA-002 ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16738</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16738"/>
		<updated>2016-10-23T09:51:39Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Korrektur Anlernvorgang, Tabelle Readings, Tabelle Attribute, Hinzufügen Tabelle Setter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt-iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV zweimal drücken (Montageposition = 0%). Der erfolgreiche Anlernvorgang wird durch einmaliges Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Nach Montage Taster einmal drücken - das Ventil fährt die von FHEM gewünschte Position an.&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; desired-temp &amp;lt;wert°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherheit des Heizkörperventils gegen Festsetzen durch Rost oder Kalk, wird im Sommermodus pro Tag eine Servicefahrt – einmal auf und zu – des Ventils durchgeführt. Zusätzlich wird dreimal am Tag die Verbindung mit FHEM aufgerufen. Das dient zur Kontrolle, dass alle bislang verbundenen Devices noch vorhanden sind und ordnungsgemäß miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wenn mehr als dreimal hintereinander die Funkkommunikation mit FHEM fehlschlug (was mehr als 30 Minuten im Normalbetrieb bedeutet), sendet der Aktor nur noch alle Stunde und - falls das Ventil zu weniger als 50 Prozent geöffent ist, wird es auf 50% aufgefahren.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.}}&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; &amp;lt;setter&amp;gt; &amp;lt;wert&amp;gt; ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! set !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|desired-temp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|liftSet||||??&lt;br /&gt;
|-&lt;br /&gt;
|runInit||||beim nächsten Funkkontakt wird ein Kalibrierungslauf angestoßen&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0...100||Setze Aktorposition auf X%; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||10...30||Soll-Temperatur für den FHEM-PID-Controler, der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;ein&#039;&#039;&#039;geschaltet; ein runInit wird ausgelöst&lt;br /&gt;
|-&lt;br /&gt;
|ValveCloses||||Ventil auf 0% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|ValveOpens||||Ventil auf 100% setzen; der PID-Controler des FHEM-Moduls wird &#039;&#039;&#039;aus&#039;&#039;&#039;geschaltet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise: wenn Kommunikation ausgefallen; Aktor blinkt dreimal&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||wird vom iTRV nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||wird vom iTRV nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||||wird vom iTRV nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||&#039;&#039;&#039;off&#039;&#039;&#039; / runinit||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||Betrieb mit Stellwert-Vorgabe / mit Temperatursollwert-Vorgabe / Ruhebetrieb im Sommer&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||||actuator_in_errorPos / dead_sensor / no_temperature_value / setpoint_device_missing||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||||processing|alarm / idle / &#039;&#039;&#039;processing&#039;&#039;&#039; / start / stop||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||interne iRTV-Temperatur (wenn attr setpointRefDev nicht gesetzt wird diese Temperatur benutzt - ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur, höhere Temperaturen sind Indiz für Wärmeangebot vom Vorlauf, das den Energiespeicher lädt)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||iTRV hat keinen eigenen PID-Controler&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||beim letzten Funkkontakt gemeldete Ist-Position vom Aktuator in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||beim nächsten Funkkontakt gesendete Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||zuletzt gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom iTRV nicht gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||iTRV ignoriert diesen Wert und benutzt &#039;&#039;&#039;50%&#039;&#039;&#039; oder den zuvor gesendeten höheren Stellwert&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise &#039;&#039;&#039;nicht gesetzt, es wird der modul-eigene PID-Controler benutzt&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||CC.Kueche||||Ein Device, das die Solltemperatur vorgibt. Z.B.: Heating_Control&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||Sender-ID&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das fortlaufend die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
Bedeutung von set &amp;lt;name&amp;gt; liftSet&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16724</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16724"/>
		<updated>2016-10-21T14:12:04Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=3.7 V, LiOn-Akku&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt-iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV einmal drücken. Der erfolgreiche Anlernvorgang wird durch Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.}}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||||&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||dead_sensor||||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||alarm||||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||processing||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||vom iRTV gemessene Temperatur (wenn attr setpointRefDev nicht gesetzt; diese Temperatur ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||Aktuatorstellung in % beim letzten Aufwachen gemeldet&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||zur Verarbeitung anstehende nächste Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||zur Verarbeitung anstehende nächste Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||beim letzten Aufwachen gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom iTRV nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise nicht gesetzt, dann wird der modul-eigene PID-Controler benutzt&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||T.Kueche||||Ein Device (neben EnOcean durchaus auch 1-Wire, Homematic oder DOIF, Heating_Control), das die Solltemperatur vorgibt&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||270||||&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16723</id>
		<title>Micropelt iTRV Kleinstellantrieb</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Micropelt_iTRV_Kleinstellantrieb&amp;diff=16723"/>
		<updated>2016-10-21T14:09:51Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: redaktionelle Änderungen, Erweiterung Info um event-on-update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=ITRV.jpg&lt;br /&gt;
|Bildbeschreibung=Batterieloser Heizungssteller&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWProtokoll=EnOcean Protokoll EEP A5-20-01 (Ventil Position in %)&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=TEG (Thermoelektrischer Generator;autark)&lt;br /&gt;
|HWSize=59 × 64 × 59 [mm] (Breite × Höhe × Tiefe), Gewicht 260 g&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Micropelt GmbH&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-Micropelt-iRTV-Kleinstellantrieb&#039;&#039;&#039; ist ein batterieloser Kleinstellantrieb für Raumtemperaturregelung&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Kleinstellantrieb, der ohne Batterien auskommt, da er über einen thermolektrischen Generator seine Energie aus der Temperaturdifferenz des Heizungsvorlaufes und der Raumtemperatur bezieht.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#falls vorhanden, alle bisherigen Fhem Devices des Aktors löschen und nach Speichern der geänderten Konfiguration Fhem neu starten&lt;br /&gt;
#Fhem in Lernmodus versetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am iTRV einmal drücken. Der erfolgreiche Anlernvorgang wird durch Aufleuchten der Status-LED quittiert. (Fehlanzeige: 6mal Blinken)&lt;br /&gt;
#Aktor-Device wird in Fhem automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nutzt Fhem den eigenen PID-Regler des Moduls, der auf die Eingabe einer Temperaturvorgabe wartet:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solange kein Referenz-Device mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; temperatureRefDev &amp;lt;Temperaturdevice mit einem Reading temperature&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; angegeben wurde, benutzt das Gerät einen internen Temperaturfühler, der bauartbedingt nicht geeignet für eine Raumregelung ist.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Zum Energiesparen verarbeitet der Aktor nur alle 586 oder 587 Sekunden (Sommermodus: alle 8 Stunden) Telegramme von Fhem. Darum zeigen Fhem-Befehle keine sofortige Aktorreaktion, sondern erst nach der genannten Zeitspanne. Die Rückmeldung des Aktors an Fhem über die erfolgte Befehlsausführung erfolgt wiederum erst nach erneutem Ablauf der Zeitspanne.&lt;br /&gt;
Falls keine Temperaturdaten geliefert werden, geht das Device in einen Stromsparmodus und fragt nur noch alle 2 Stunden an.&lt;br /&gt;
Zur Vermeidung dieses Stromsparmodus, in dem eben auch nicht nachgeregelt wird, sollte bei Referenzgeräte wie einem  Raumthermometer das attr event-on-update &#039;&#039;&#039;nicht&#039;&#039;&#039; benutzt werden. Falls die Temperatur sich 1 Stunde lang nicht ändert, würde entsprechend auch eine Stunde lang kein Referenzwert gesendet, der Stelltrieb in den Sparmodus gehen und für die nächsten 2 Stunden nun kommende Änderungen nicht verarbeiten.}}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reading !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|actuatorState||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|alarm||no_response_from_actuator||||nur fallweise&lt;br /&gt;
|-&lt;br /&gt;
|battery||ok||||&lt;br /&gt;
|-&lt;br /&gt;
|cover||closed||||&lt;br /&gt;
|-&lt;br /&gt;
|delta||-9.75||||&lt;br /&gt;
|-&lt;br /&gt;
|energyInput||disabled||||&lt;br /&gt;
|-&lt;br /&gt;
|energyStorage||charged||||&lt;br /&gt;
|-&lt;br /&gt;
|maintenanceMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|operationMode||setpointTemp||&#039;&#039;&#039;setpointTemp&#039;&#039;&#039; / summerMode / setpointSet||&lt;br /&gt;
|-&lt;br /&gt;
|operationModeRestore||setpointTemp||||nur fallweise: Modus, der beim Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|pidAlarm||dead_sensor||||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||alarm||||&lt;br /&gt;
|-&lt;br /&gt;
|p_d||0||||&lt;br /&gt;
|-&lt;br /&gt;
|p_i||100||||&lt;br /&gt;
|-&lt;br /&gt;
|p_p||-487.5||||&lt;br /&gt;
|-&lt;br /&gt;
|pidState||processing||||&lt;br /&gt;
|-&lt;br /&gt;
|roomTemp||22.0||||vom iRTV gemessene Temperatur (wenn attr setpointRefDev nicht gesetzt; diese Temperatur ist für Regelung nicht brauchbar wegen Verfälschung durch Vorlauftemperatur)&lt;br /&gt;
|-&lt;br /&gt;
|selfCtrl||off||||&lt;br /&gt;
|-&lt;br /&gt;
|setpoint||0||||Aktuatorstellung in % beim letzten Aufwachen gemeldet&lt;br /&gt;
|-&lt;br /&gt;
|setpointSet||15||||zur Verarbeitung anstehende nächste Aktuatorstellung in %&lt;br /&gt;
|-&lt;br /&gt;
|setpointTemp||15.0||||zur Verarbeitung anstehende nächste Soll-Temperatur. Kann gesetzt werden über &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; desired-temp &amp;lt;°C&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder auch durch MOdule wieHeating_Control oder WeekdayTimer&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRestore||16.0 ||||nur fallweise: setpointTemp, die bei Beenden des summermode gesetzt wird&lt;br /&gt;
|-&lt;br /&gt;
|state||T: 23.4 SPT: 15.0 SP: 0||||T:=Raumtemperatur vom Referenzsensor, SPT = setpointTemp, SP=setpoint&lt;br /&gt;
|-&lt;br /&gt;
|teach||4BS teach-in accepted EEP A5-20-01 Manufacturer: Micropelt GmbH||||&lt;br /&gt;
|-&lt;br /&gt;
|temperature||24.75||||beim letzten Aufwachen gemeldete Raumtemperatur vom Referenz-Sensor (siehe Attribut temperatureRefDev)&lt;br /&gt;
|-&lt;br /&gt;
|waitingCmds||runInit||||&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||240||||&lt;br /&gt;
|-&lt;br /&gt;
|window||closed||open / &#039;&#039;&#039;closed&#039;&#039;&#039;||wird vom iTRV nicht unterstützt&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut !! Beispiel !! Wertebereich/Default !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|comMode||biDir||||&lt;br /&gt;
|-&lt;br /&gt;
|destinationID||unicast||||&lt;br /&gt;
|-&lt;br /&gt;
|eep||A5-20-01||||&lt;br /&gt;
|-&lt;br /&gt;
|manufID||049||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorErrorPos||20||||&lt;br /&gt;
|-&lt;br /&gt;
|pidActorLimitLower||1||||bei 0% Öffnung wird eine Initialisierung ausgelöst?&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_I||0.2||||&lt;br /&gt;
|-&lt;br /&gt;
|pidFactor_P||50||||&lt;br /&gt;
|-&lt;br /&gt;
|setpointRefDev||||||Das Device, das die Ventilöffnung (Aktuator) vorgibt, z.B. ein Raumregler, FHEM-PID20. Typischerweise nicht gesetzt, dann wird der modul-eigene PID-Controler benutzt&lt;br /&gt;
|-&lt;br /&gt;
|setpointTempRefDev||T.Kueche||||Ein Device (neben EnOcean durchaus auch 1-Wire, Homematic oder DOIF, Heating_Control), das die Solltemperatur vorgibt&lt;br /&gt;
|-&lt;br /&gt;
|subDef||********||||&lt;br /&gt;
|-&lt;br /&gt;
|subType||hvac.01||||&lt;br /&gt;
|-&lt;br /&gt;
|summerMode||off||||&lt;br /&gt;
|-&lt;br /&gt;
|teachMethod||4BS||||&lt;br /&gt;
|-&lt;br /&gt;
|temperatureRefDev||T.Kueche||||Das Device, das die Ist-Temperatur meldet&lt;br /&gt;
|-&lt;br /&gt;
|wakeUpCycle||270||||&lt;br /&gt;
|-&lt;br /&gt;
|webCmd||setpointTemp||||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
Timing der Sensordaten (Sensor dead) und no_response_from_actuator,Auswirkung von event-on-NN beim Sensor, wakeupCycle&lt;br /&gt;
Sorgt Setpoint 0 für eine Initialisierung?&lt;br /&gt;
Optimierung von p_i,p_d,p_p in der Praxis&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,34314.msg290203.html#msg290203 Forenbeitrag]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-SEC-KEY_KeyMatic&amp;diff=16373</id>
		<title>HM-SEC-KEY KeyMatic</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-SEC-KEY_KeyMatic&amp;diff=16373"/>
		<updated>2016-09-13T21:12:01Z</updated>

		<summary type="html">&lt;p&gt;Cwagner: Ergänzung zur Anlernprozedur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Features ==&lt;br /&gt;
Das Gerät dient zum motorgesteuerten Betätigen von Zylinderschlössern in Türen.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Der HM-SEC-KEY Keymatic  verwendet ausschließlich die AES authentifizierte Kommunikation und kann mit dem [[HMLAN Konfigurator]] bzw. [[CUL]] gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. An der KeyMatic muss dafür die Anlerntaste (Taste Schloss öffnen) betätigt werden.&lt;br /&gt;
{{Hinweis|Falls bereits ein Handsender als Masterfernbedienung 1 angelernt ist (was für autarken Betrieb sehr empfehlenswert ist), muss der Anlernvorgang zwingend durch Tastendruck auf eine Taste dieser Fernbedienung bestätigt werden.&lt;br /&gt;
Bestätigung im fhem.log &#039;&#039;&#039;3: CUL_HM pair: Haustuer keyMatic, model HM-SEC-KEY serialNr LEQ********&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Die KeyMatic-Unterstützung existiert derzeit in der aktuellen Entwicklerversion von FHEM&lt;br /&gt;
&lt;br /&gt;
=== Sicherheitshinweis ===&lt;br /&gt;
Wenn die KeyMatic an einem aktiven HMLAN Konfigurator angelernt wurde, kann die entsprechende Tür per FHEM ver- / entriegelt bzw. geöffnet werden. Somit sollte das Netzwerk in dem FHEM läuft entsprechend gesichert sein. (Nicht nach Außen geöffnet, kein unsicheres WLAN usw.)&lt;br /&gt;
&lt;br /&gt;
Die Verwendung eines eigenen [[AES Encryption#Aktivieren.2C_Einrichten.2C_Umgang_in_FHEM|AES Sicherheitsschlüssels]] ist dringend anzuraten, da ansonsten eine KeyMatic relativ einfach ferngesteuert werden kann.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Beispiel für die Konfiguration:&lt;br /&gt;
&lt;br /&gt;
ssssss -&amp;amp;gt; 6-Stellige hexadezimale Seriennummer. (Siehe Logfile: CUL_HM Unknown device CUL_HM_keyMatic_ssssss, please define it)&lt;br /&gt;
xxxxxxx -&amp;amp;gt; Seriennummer (vom Aufkleber auf dem Gerät)&lt;br /&gt;
&lt;br /&gt;
 define keymatic CUL_HM ssssss&lt;br /&gt;
 attr keymatic devInfo 010100&lt;br /&gt;
 attr keymatic firmware 2.4&lt;br /&gt;
 attr keymatic hmClass receiver&lt;br /&gt;
 attr keymatic model HM-SEC-KEY-S&lt;br /&gt;
 attr keymatic room Flur&lt;br /&gt;
 attr keymatic serialNr JEQxxxxxxx&lt;br /&gt;
 attr keymatic subType keyMatic&lt;br /&gt;
 attr keymatic webCmd lock:unlock:open&lt;br /&gt;
&lt;br /&gt;
== Mögliche Zustände ==&lt;br /&gt;
KeyMatic hat folgende Schaltzustände:&lt;br /&gt;
&lt;br /&gt;
  locked -&amp;amp;gt; Der Riegel des Türschlosses ist an die vorher festgelegte Verschlussstellung gefahren (Tür verschlossen)&lt;br /&gt;
  unlocked -&amp;amp;gt; Der Riegel des Türschlosses ist &amp;quot;eingefahren&amp;quot; (Tür nicht verschlossen)&lt;br /&gt;
  uncertain (locked / unlocked) -&amp;amp;gt; Das Schloss wurde am Handrad gedreht. Die Schlossposition ist somit nicht mehr als &amp;quot;zuverlässig erkannt&amp;quot; gemeldet.&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-Sec-Key_UM_GE_eQ-3_081218.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Türschlosssteuerung]]&lt;/div&gt;</summary>
		<author><name>Cwagner</name></author>
	</entry>
</feed>