<?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=Joshi04</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=Joshi04"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Joshi04"/>
	<updated>2026-04-10T01:49:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36315</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36315"/>
		<updated>2021-11-28T20:15:37Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Weitere Ergänzungen zur Komplettierung des Artikels&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=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner={{Link2FU|41939|timmib}}}}&lt;br /&gt;
Genau wie mit dem Modul [[DbLog]] lassen sich mit [[InfluxDBLogger]] Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf die Beschreibung des Moduls &#039;&#039;DbLog&#039;&#039; verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur numerische Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. Textbasierte Werte können aber auch durch numerische Werte ersetzt werden. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=&#039;&#039;&#039;Alternativmodul&#039;&#039;&#039;&lt;br /&gt;
Um Missverständnisse zu vermeiden, sei an dieser Stelle darauf hingewiesen, dass es bereits ein anderes Modul mit den Namen [[InfluxDBLog|93_InfluxDBLog]] für die Anbindung an eine InfluxDB gibt, das zu diesem Zeitpunkt (11/2021) allerdings nicht weiterentwickelt zu werden scheint und um das es in diesem Artikel definitiv nicht geht. &lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch hier: {{Link2Forum|Topic=71551|Message=896556|LinkText=Forumsbeitrag}}, {{Link2Forum|Topic=71551|Message=1071675|LinkText=Forumsbeitrag}}, {{Link2Forum|Topic=71551|Message=1090783|LinkText=Forumsbeitrag}}&lt;br /&gt;
&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InfluxDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen. }}&lt;br /&gt;
Im Folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InfluxDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung einer Datenbank als Docker Container ==&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_USERNAME}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_ORG}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_BUCKET}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Definition des oben genannten Containers &amp;quot;fhem2&amp;quot; ist für die Einrichtung der Datenbank nicht notwendig und ist an dieser Stelle nur der Vollständigkeit halber mit aufgeführt. FHEM kann auch separat installiert sein, es bietet sich aber in diesem Beispiel an, gleich mit in das Docker-Compose-File mit aufgenommen zu werden.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei empfohlen, die Zugangsinformationen in eine .env Datei auszulagern, die zugriffsbeschränkt im gleichen Verzeichnis liegt, wie die &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; Datei.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
INFLUXDB_USERNAME=myusername&lt;br /&gt;
INFLUXDB_PASSWORD=passwordpasswordpassword&lt;br /&gt;
INFLUXDB_ORG=myorg&lt;br /&gt;
INFLUXDB_BUCKET=mybucket&lt;br /&gt;
INFLUXDB_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch beim ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist FHEM über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose up -d &amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose down &amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Einrichtung der Datenbank wird empfohlen, die Ansprechbarkeit der Datenbank über das Webinterface unter Zuhilfenahme des vergebenen Usernamens und Passworts zu testen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
http://&amp;lt;ip-des-dockercontainers&amp;gt;:8086&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Loggers als Device in FHEM ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Unterschiede zur Definition von DBLog&#039;&#039;&#039;&lt;br /&gt;
Um Fehlern bei der Umstellung von DBLog auf InfluxDBLogger zu vermeiden, bitte beachten: anders als bei DBLog werden bei der Definition nur die Devices definiert und nicht zusätzlich auch die Readings {{Link2Forum|Topic=114860|Message=1119696|LinkText=(Forum).}}. }}&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2 folgende Attributfestlegungen notwendig werden:&lt;br /&gt;
* Das Attribut api=v2, das die InfluxDB Version 2 festlegt. Hiermit wird auch das Setzen der Org mit dem folgenden Attribut notwendig, wie auch die Verknüpfung des Buckets als &#039;&#039;dbname&#039;&#039;.  &lt;br /&gt;
* Das Attribut org=myorg, das die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token, das die Verwendung eines Tokens festlegt. Hiermit ist ebenfalls das Definieren eines Users als Attribut und das Setzen eines Passwortes überflüssig. Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Finetuning des Loggings ==&lt;br /&gt;
Bei der Optimierung ist der Einschränkung an der Quelle (am jeweiligen Device) immer der Vorzug zu geben vor der Einschränkung an zentraler Stelle, um unnötig entstehende Daten zu vermeiden. Allerdings kann es Fälle geben, in denen eine Whitelist oder Blacklist bzgl. der Definition, welche der entstandenen Events geloggt werden sollen, sinnvoll sein kann.&lt;br /&gt;
&lt;br /&gt;
Dieses kann exklusiv oder zusätzlich zu den im Folgenden genannten Einschränkungen über die jeweiligen Devices an zentraler Stelle geschehen.&lt;br /&gt;
&lt;br /&gt;
=== Einschränkung über die jeweiligen Devices ===&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] um Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
* event-aggregator ({{Link2Forum|Topic=114860|Message=1110435|LinkText=Forum}})&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;
Verweis auf die commandref {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} bzgl. der Attribute &amp;lt;code&amp;gt;readingInclude&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;readingInclude&amp;lt;/code&amp;gt; bzw. ein Link ins Forum zu einem Beispiel für dessen Verwendung ({{Link2Forum|Topic=114860|Message=1119696|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
=== Loggen von Zuständen === &lt;br /&gt;
Wie eingangs erwähnt, ist die Datenbank designt, numerische Werte zu loggen. Nichtnumerische Werte lassen sich nur über  dem Umweg „tags“ in der Datenbank ablegen. ({{Link2Forum|Topic=114860|Message=1127469|LinkText=Forum}})&lt;br /&gt;
({{Link2Forum|Topic=114860|Message=1131301|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
Sollen nun Zustände von z.B. Fenster- oder Türkontakten geloggt werden, kommt das Attribut &amp;lt;code&amp;gt; conversion &amp;lt;/code&amp;gt; zum Einsatz. Mit ihm lassen sich Zustände entsprechend in Werte umwandeln.&lt;br /&gt;
&lt;br /&gt;
﻿Die jeweiligen Umwandelungen werden kommagetrennt aufgezählt. Mehrere Werte können durch ein pipe getrennt aufgezählt werden. Die Parameteraufzählung enthält dabei keine Leerzeichen.&lt;br /&gt;
﻿Conversions sind nicht case sensitive ({{Link2Forum|Topic=114860|Message=1122035|LinkText=Forum}}).&lt;br /&gt;
﻿Ein entsprechendes Beispiel für die Anwendung befindet sich in der commandref {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}}.&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Logging-Devices ===&lt;br /&gt;
Um eine weitere Detaillierung des Loggings umzusetzen, bei unterschiedlicher Kombination von devspec, readingInclude, readingExclude, sowie der entsprechenden Limitierung der Events, sei an dieser Stelle ebenfalls darauf verwiesen, mehrere Definitionen des Moduls kombinieren zu können, z.B. 5 separate Logger, einer für Raumsensoren, einer für die Heizung, einer für Energiezähler, einer für das Wetter und ein weiterer für alles weitere Allgemeine. &lt;br /&gt;
&lt;br /&gt;
=== Weiteres Feinetuning ===&lt;br /&gt;
﻿Ohne weitere Definition von Attributen werden die numerischen Daten mit &amp;lt;code&amp;gt;Site_name&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; in die Datenbank geschrieben. Dieses ist historisch bedingt, siehe ({{Link2Forum|Topic=71551|Message=1072372|LinkText=Forum}}) und ({{Link2Forum|Topic=114860|Message=1090782|LinkText=Forum}}). &lt;br /&gt;
&lt;br /&gt;
﻿Als nützlich Kombination hat sich beispielsweise die Definition folgender Attribute herausgestellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
﻿attr influxDB fields $READINGNAME=$READINGVALUE&lt;br /&gt;
attr influxDB measurement $DEVICE&lt;br /&gt;
attr influxDB tags device={my $str = AttrVal($device,&amp;quot;alias&amp;quot;,$device);; $str =~ s/\s/_/g;; return $str;;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses führt dazu, dass &lt;br /&gt;
* das durch Unterstriche verbundene Alias als &amp;quot;_Device&amp;quot;, &lt;br /&gt;
* der Devicename als &amp;quot;_Measurement&amp;quot;,&lt;br /&gt;
* der Readingsname als &amp;quot;_Field&amp;quot;&lt;br /&gt;
﻿verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Für alternative Verwendung der entsprechenden Attribute sei ebenfalls auf die ComandRef {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} verwiesen.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
== Zusätzliches ==&lt;br /&gt;
=== Probleme bei der Authentifizierung ===&lt;br /&gt;
Bei der Ersteinrichtung des Moduls scheint es Konfigurations-Zustände zu geben, in denen die Authentifizierung trotz richtiger Zugangsdaten zunächst fehlschlägt (aufgetreten bei der Verwendung von Api v2) {{Link2Forum|Topic=121454|Message=1160757|LinkText=(Forum)}}. Dabei scheint es zu helfen, das Modul zu löschen und neu einzurichten. &lt;br /&gt;
&lt;br /&gt;
Da dieses nur bei der Ersteinrichtung aufzutreten scheint, konnte die Ursache bislang noch nicht genauer identifiziert werden.&lt;br /&gt;
&lt;br /&gt;
=== Migration von Altdaten ===&lt;br /&gt;
Zwei Hinweise ins Forum bzgl.&lt;br /&gt;
* Scripte, um filelogs zu migrieren: ({{Link2Forum|Topic=114860|Message=1104495|LinkText=Forum}}) oder ({{Link2Forum|Topic=71551|Message=732935|LinkText=Forum}})&lt;br /&gt;
* Scripte, um Mysql Daten zu migrieren: ({{Link2Forum|Topic=118049|Message=1129622|LinkText=Forum}}) oder ({{Link2Forum|Topic=71551|Message=838940|LinkText=Forum}}) oder ({{Link2Forum|Topic=71551|Message=895012|LinkText=Forum}}) oder ({{Link2Forum|Topic=71551|Message=895764|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
=== Plot-Abrisse vermeiden ===&lt;br /&gt;
Mit der Verwendung einer vollkommen neuen Datenverarbeitung, wird auch die Problematik der Plot-Abrisse an Datumsübergängen wieder zum Thema. Da das Modul [[logProxy]] direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es hier nicht eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Modul InfluxDBLogger besitzt allerdings selbst die notwendige Funktionalität, um die aktuellen Werte der konfigurierten Readings der konfigurierten Geräte in die Datenbank zu schreiben (Verweis auf die Commandref von {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} für weitere Details).&lt;br /&gt;
&lt;br /&gt;
Ein entsprechendes DOIF müsste dann so aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
define addlog DOIF ([23:59:59] or [00:00:00])(set influxDB write)&lt;br /&gt;
attr addlog do always&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Device Alias mit Leerzeichen als tag ===&lt;br /&gt;
Über das Attribut &amp;lt;code&amp;gt;tags&amp;lt;/code&amp;gt; lassen sich weitere Informationen den Daten hinzufügen wie z.B. die vergebenen Aliase der Devices. Haben diese allerdings Leerzeichen, schlägt das logging fehl. Eine Ersetzung der Leerzeichen in Aliasen und der Verwendung als tag kann über diese Attributdefinition realisiert werden ({{Link2Forum|Topic=114860|Message=1108269|LinkText=Forum}}):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
attr influxDB tags device={my $str = AttrVal($device,&amp;quot;alias&amp;quot;,$device);; $str =~ s/\s/_/g;; return $str;;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* https://www.influxdata.com/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36282</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36282"/>
		<updated>2021-11-25T03:32:06Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Mehrere kleinere Ergänzungen und Korrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|Dieser Artikel befindet sich im Aufbau und beschreibt daher anstatt einer kompletten Konfiguration bislang nur Teilabschnitte.}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Protokolliert Ereignisse in einer Datenbank&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner={{Link2FU|41939|timmib}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Genau wie mit dem Modul [[DbLog]] lassen sich mit [[InfluxDBLogger]] Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf die Beschreibung des Moduls &#039;&#039;DbLog&#039;&#039; verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur numerische Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. Textbasierte Werte können aber auch durch numerische Werte ersetzt werden. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Alternativmodul&#039;&#039;&#039;&lt;br /&gt;
Um Missverständnisse zu vermeiden sei an dieser Stelle darauf hingewiesen, dass es bereits ein anderes Modul mit den Namen 93_InfluxDBLog für die Anbindung an eine InfluxDB gibt, das zu diesem Zeitpunkt (11/2021) allerdings scheint, nicht weiterentwickelt zu werden und um das es in diesem Artikel definitiv nicht geht. {{Link2Forum|Topic=71551|Message=1090783|LinkText=(Forum)}}&lt;br /&gt;
&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InfluxDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InfluxDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung einer Datenbank ===&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_USERNAME}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_ORG}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_BUCKET}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei empfohlen, die Zugangsinformationen in eine .env Datei auszulagern, die zugriffsbeschränkt im gleichen Verzeichnis liegt, wie die &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; Datei.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
INFLUXDB_USERNAME=myusername&lt;br /&gt;
INFLUXDB_PASSWORD=passwordpasswordpassword&lt;br /&gt;
INFLUXDB_ORG=myorg&lt;br /&gt;
INFLUXDB_BUCKET=mybucket&lt;br /&gt;
INFLUXDB_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch beim ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist FHEM über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose up -d &amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose down &amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Loggers als Device ===&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Unterschiede zur Definition von DBLog&#039;&#039;&#039;&lt;br /&gt;
Um Fehlern bei der Umstellung von DBLog auf InfluxDBLogger zu vermeiden, anders als bei DBLog werden bei der Definition nur die Devices definiert und nicht zusätzlich auch die Readings {{Link2Forum|Topic=114860|Message=1119696|LinkText=(Forum).}}. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2 folgende Attributfestlegungen notwendig werden:&lt;br /&gt;
* Das Attribut api=v2, dass die InfluxDV Version 2 festlegt. Hiermit wird auch das Setzten der Org mit dem folgenden Attribut notwendig, wie auch die Verknüpfung des Buckets als &#039;&#039;dbname&#039;&#039;.  &lt;br /&gt;
* Das Attribut org=myorg, dass die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token, dass die Verwendung eines Tokens festlegt. Hiermit ist ebenfalls das Definieren eines Users als Attribut und das Setzen eines Passwortes überflüssig. Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
Bei der Optimierung ist der Einschränkung an der Quelle (am jeweiligen Device) immer der Vorzug zu geben vor der der Einschränkung an zentraler Stelle um unnötig entstehende Daten zu vermeiden. Allerdings kann es Fälle geben, in denen eine Whitelist oder Blacklist bzgl. der Definition, welche der entstandenen Event geloggt werden sollen, sinnvoll sein kann.&lt;br /&gt;
&lt;br /&gt;
Dieses kann exklusiv oder zusätzlich zu den im Folgenden genannten Einschränkungen über die jeweiligen Devices an zentraler Stelle geschehen.&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] um Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
* event-aggregator&lt;br /&gt;
{{Link2Forum|Topic=114860|Message=1110435|LinkText=(Forum)}}&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;
&lt;br /&gt;
Verweis auf die commandref {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} bzgl. der Attribute &amp;lt;code&amp;gt;readingInclude&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;readingInclude&amp;lt;/code&amp;gt; bzw. ein Link ins Forum zu einem Beispiel für dessen Verwendung {{Link2Forum|Topic=114860|Message=1119696|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
== Zusätzliches ==&lt;br /&gt;
&lt;br /&gt;
=== Probleme bei der Authentifizierung ===&lt;br /&gt;
Bei der Ersteinrichtung des Moduls scheint es Konfigurations-Zustände zu geben, in denen die Authentifizierung trotz richtiger Zugangsdaten zunächst fehlschlägt (aufgetreten bei der Verwendung von Api v2) {{Link2Forum|Topic=121454|Message=1160757|LinkText=(Forum)}}. Dabei scheint es zu helfen, das Modul zu löschen und neu einzurichten. &lt;br /&gt;
&lt;br /&gt;
Da dieses nur bei der Ersteinrichtung aufzutreten scheint, konnte die Ursache bislang noch nicht genauer identifiziert werden.&lt;br /&gt;
&lt;br /&gt;
=== Migration von Altdaten ===&lt;br /&gt;
Zwei Hinweise ins Forum bzgl.&lt;br /&gt;
* Ein Script, um filelogs zu migrieren {{Link2Forum|Topic=114860|Message=1104495|LinkText=(Forum)}}.&lt;br /&gt;
* Ein Script, um Mysql Daten zu migrieren {{Link2Forum|Topic=118049|Message=1129622|LinkText=(Forum)}}&lt;br /&gt;
&lt;br /&gt;
=== Plot-Abrisse vermeiden ===&lt;br /&gt;
Mit der Verwendung einer vollkommen neuen Datenverarbeitung, wird auch die Problematik der Plot-Abrisse an Datumsübergängen wieder zum Thema. Da das Modul [[logProxy]] direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es hier nicht eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Modul InfluxDBLogger besitzt allerdings selbst die notwendige Funktionalität, um die aktuellen Werte der konfigurierten Readings der konfigurierten Geräte in die Datenbank zu schreiben (Verweis auf die Commandref von {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} für weitere Details).&lt;br /&gt;
&lt;br /&gt;
Ein entsprechendes DOIF müsste dann so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define addlog DOIF ([23:59:59] or [00:00:00])(set influxDB write)&lt;br /&gt;
attr addlog do always&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Device Alias mit Leerzeichen als tag ===&lt;br /&gt;
Über das Attribut &amp;lt;code&amp;gt;tags&amp;lt;/code&amp;gt; lassen sich weitere Informationen den Daten hinzufügen wie z.B. die vergebenen Aliase der Devices. Haben diese allerdings Leerzeichen, schlägt das logging fehl. Eine Ersetzung der Leerzeichen in Aliasen und der Verwendung als tag kann über diese Attributdefinition realisiert werden {{Link2Forum|Topic=114860|Message=1108269|LinkText=(Forum)}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr influxDB tags device={my $str = AttrVal($device,&amp;quot;alias&amp;quot;,$device);; $str =~ s/\s/_/g;; return $str;;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36242</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36242"/>
		<updated>2021-11-21T13:45:43Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Schreibfehler korrigiert / Verwendung von .env für &amp;quot;Geheimnisse&amp;quot; / Prob bei Ersteinrichtungsauthentifizierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|Dieser Artikel befindet sich im Aufbau und beschreibt daher anstatt einer kompletten Konfiguration bislang nur Teilabschnitte.}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Protokolliert Ereignisse in einer Datenbank&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner={{Link2FU|41939|timmib}}&lt;br /&gt;
}}&lt;br /&gt;
Genau wie mit dem Modul [[DbLog]] lassen sich mit [[InfluxDBLogger]] Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf die Beschreibung des Moduls &#039;&#039;DbLog&#039;&#039; verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur numerische Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. Textbasierte Werte können aber auch durch numerische Werte ersetzt werden. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InfluxDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InfluxDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung einer Datenbank ===&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_USERNAME}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_ORG}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_BUCKET}&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei empfohlen, die Zugangsinformationen in eine .env Datei auszulagern, die zugriffsbeschränkt im gleichen Verzeichnis liegt, wie die &amp;lt;code&amp;gt;docker-complose.yml&amp;lt;/code&amp;gt; Datei.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
INFLUXDB_USERNAME=myusername&lt;br /&gt;
INFLUXDB_PASSWORD=passwordpasswordpassword&lt;br /&gt;
INFLUXDB_ORG=myorg&lt;br /&gt;
INFLUXDB_BUCKET=mybucket&lt;br /&gt;
INFLUXDB_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch beim ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist fhem über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose up -d &amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
:&amp;lt;code&amp;gt;docker-compose down &amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Loggers als Device ===&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2&lt;br /&gt;
* &#039;&#039;dbname&#039;&#039; dem vergebenen Bucket entspricht.&lt;br /&gt;
* Das Attribut api=v2 die InfluxDV Version 2 festlegt.&lt;br /&gt;
* Das Attribut org=myorg die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token die Verwendung eines Tokens festlegt.&lt;br /&gt;
&lt;br /&gt;
Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
{{Todo|Todo}}&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;
{{Todo|Todo}}&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] um Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
== Zusätzliches ==&lt;br /&gt;
=== Plot-Abrisse vermeiden ===&lt;br /&gt;
Mit der Verwendung einer vollkommen neuen Datenverarbeitung, wird auch die Problematik der Plot-Abrisse an Datumsübergängen wieder zum Thema. Da das Modul [[logProxy]] direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es hier nicht eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Modul InfluxDBLogger besitzt allerdings selbst die notwendige Funktionalität, um die aktuellen Werte der konfigurierten Readings der konfigurierten Geräte in die Datenbank zu schreiben (Verweis auf die Commandref von {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} für weitere Details).&lt;br /&gt;
&lt;br /&gt;
Ein entsprechendes DOIF müsste dann so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define addlog DOIF ([23:59:59] or [00:00:00])(set influxDB write)&lt;br /&gt;
attr addlog do always&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probleme bei der Authentifizierung ===&lt;br /&gt;
Bei der Ersteinrichtung des Moduls scheint es Konfigurations-Zustände zu geben, in denen die Authentifizierung trotz richtiger Zugangsdaten zunächst fehlschlägt (aufgetreten bei der Verwendung von Api v2) {{Link2Forum|Topic=121454|Message=1160757|LinkText=(Forum)}}. Dabei scheint es zu helfen, das Modul zu löschen und neu einzurichten. &lt;br /&gt;
&lt;br /&gt;
Da dieses nur bei der Ersteinrichtung aufzutreten scheint, konnte die Ursache bislang noch nicht genauer identifiziert werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Plot-Abriss_vermeiden&amp;diff=36209</id>
		<title>Plot-Abriss vermeiden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Plot-Abriss_vermeiden&amp;diff=36209"/>
		<updated>2021-11-21T08:40:04Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Alternativen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=g|RNText=&#039;&#039;&#039;HINWEIS&#039;&#039;&#039;: Es gibt mittlerweile (12/2019) das Attribut &#039;&#039;addLog&#039;&#039; für [[FileLog]] Devices.     &lt;br /&gt;
This attribute takes a comma-separated list of devspec:reading:maxInterval triples.  You may use regular expressions for reading. The last value of the reading will be written to the logfile, if after maxInterval seconds no event for this device/reading has arrived. &lt;br /&gt;
&lt;br /&gt;
Siehe auch {{Link2Forum|Topic=106489|LinkText=dieses Forenthema}}.}}&lt;br /&gt;
== Attribut addLog ==&lt;br /&gt;
Seit 12/2019 können mit dem Attribut &#039;&#039;addLog&#039;&#039; am [[FileLog]] Device maximale Zeitspannen vorgegeben werden, nach denen der letzte bekannte Wert des Readings erneut in das Logfile übernommen werden soll, sofern zwischenzeitlich kein neuer Wert eingetroffen ist. Im Attribut sind Triplette in der Form &amp;lt;code&amp;gt;devspec:reading:maxInterval&amp;lt;/code&amp;gt; anzugeben, mehrere Einträge durch Komma getrennt. Die betreffenden Devices und Readings können über Regex bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
== Timerbasierte Zusatzeinträge ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Bei Nutzung des Attributs &amp;lt;code&amp;gt;event-on-change&amp;lt;/code&amp;gt; werden Log-Einträge nur bei Werteänderung geschrieben. Dies führt&lt;br /&gt;
# zum Abriss der Logs zum Ende des alten und zum Beginn des neuen Tages&lt;br /&gt;
# zu inadäquat langen Pausen zwischen Logeinträgen, z.B. für &amp;lt;code&amp;gt;actuator&amp;lt;/code&amp;gt;, der z.B. in den Wintermonaten bei Anwesenheit durchgängig 100%, bei Abwesenheit durchgängig 0% betragen kann. Der Wechsel zwischen diesen Werten wird mit langen Flanken dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
Aus diesem Grund wurde die Routine &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; erstellt (siehe [[#Implementierung|Implementierung]]).&lt;br /&gt;
Sie fügt zu definierten Zeitpunkten Einträge im Log hinzu.&lt;br /&gt;
Dadurch sollen die o.g. Effekte vermieden werden.&lt;br /&gt;
Zusätzliche Einträge sind mit dem Anhang &amp;lt;code&amp;gt;&amp;lt;&amp;lt; addLog&amp;lt;/code&amp;gt; gekennzeichnet.&lt;br /&gt;
Der Aufruf erfolgt sinnvollerweise aus einem &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt; oder einem &amp;lt;code&amp;gt;DOIF&amp;lt;/code&amp;gt;.&lt;br /&gt;
Üblich ist der Aufruf für alle Geräte bzw. readings, für die &amp;lt;code&amp;gt;event-on-change&amp;lt;/code&amp;gt; gesetzt ist.&lt;br /&gt;
&lt;br /&gt;
Die Routine hat zwei Aufrufparameter:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
addLog(&amp;lt;devicename&amp;gt;, &amp;lt;reading&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele aus fhem.cfg ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
### jede Stunde einen Eintrag für FHT actuator&lt;br /&gt;
define a_actuator at +*01:00 {addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;)}&lt;br /&gt;
attr a_actuator room 99_System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; für mehrere &amp;lt;code&amp;gt;devices&amp;lt;/code&amp;gt; in einem &amp;quot;Makro&amp;quot; zusammenfassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define addLog notify addLog {addLog(&amp;quot;ez_Aussensensor&amp;quot;,&amp;quot;state&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;measured-temp&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;humidity&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;pressure&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;temperature&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;wind_chill&amp;quot;);;}&lt;br /&gt;
attr addLog room 99_System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
### Hier ist ein trigger des o.g. notify verwendet, um nicht in beiden at-defines alle Aufrufe listen zu müssen.&lt;br /&gt;
define a_midnight1 at *23:59 trigger addLog&lt;br /&gt;
attr a_midnight1 room 99_System&lt;br /&gt;
define a_midnight2 at *00:01 trigger addLog&lt;br /&gt;
attr a_midnight2 room 99_System&lt;br /&gt;
# Alternativ können auch die Einzelaufrufe direkt im at erfolgen, z.B.&lt;br /&gt;
define a_midnight_before at *23:59 {addLog(&amp;quot;device&amp;quot;,&amp;quot;reading&amp;quot;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiele mit DOIF ===&lt;br /&gt;
Seitdem es [[DOIF]] gibt, lässt sich das Ganze auch etwas anders umsetzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define DF_addLogDaily DOIF ([23:59] or [00:01]) ({addLog(&amp;quot;ez_FHT&amp;quot;, &amp;quot;actuator&amp;quot;)})&lt;br /&gt;
attr DF_addLogDaily room 99_System&lt;br /&gt;
attr DF_addLogDaily do always&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Da mit diesem Aufruf aber die Problematik nur nach unten verschoben wird (Zoom auf Stunde oder Vierteltag),&lt;br /&gt;
ist folgendes möglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define DF_addLogHourly DOIF ([:59] or [:01]) ({addLog(&amp;quot;ez_FHT&amp;quot;, &amp;quot;actuator&amp;quot;)})&lt;br /&gt;
attr DF_addLogHourly room 99_System&lt;br /&gt;
attr DF_addLogHourly do always&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Ganze lässt sich auch noch auf minütlich runterbrechen, erzeugt dadurch ggf. eine große Menge Logeinträge. Dies sollte man stets bedenken.&lt;br /&gt;
&lt;br /&gt;
=== Log-Beispiele ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
2012-11-04_23:46:28 ez_Aussensensor T: 9.4 H: 78.5&lt;br /&gt;
2012-11-04_23:59:00 ez_Aussensensor T: 9.4 H: 78.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-04_23:59:00 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-04_23:59:00 ez_FHT measured-temp: 17.4   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_Aussensensor T: 9.4 H: 78.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_FHT measured-temp: 17.4   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:24:31 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:42:32 ez_Aussensensor T: 9.1 H: 78.1&lt;br /&gt;
2012-11-05_16:02:59 ez_Aussensensor T: 10.3 H: 65.9&lt;br /&gt;
2012-11-05_16:05:56 ez_Aussensensor T: 10.2 H: 66.3&lt;br /&gt;
2012-11-05_16:21:47 ez_Aussensensor T: 10.2 H: 66.3   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:21:48 ez_FHT actuator: 100%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:21:48 ez_FHT measured-temp: 18.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:30:26 ez_FHT measured-temp: 18.7&lt;br /&gt;
2012-11-05_16:44:18 ez_Aussensensor T: 9.9 H: 65.8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nebeneffekte ===&lt;br /&gt;
&amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; verwendet die Funktion &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt;.&lt;br /&gt;
Für fhem ist das gleichwertig mit dem Eintreffen eines Ereignisses.&lt;br /&gt;
Es werden also ggf. alle &amp;lt;code&amp;gt;notifies&amp;lt;/code&amp;gt; ausgeführt, die für das relevante Gerät abzuarbeiten sind.&lt;br /&gt;
Dies ist wohl zu bedenken, bevor man &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Probleme ===&lt;br /&gt;
Das Modul [[dewpoint]] fügt dem &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; eines &amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt; den zusatz &amp;lt;code&amp;gt;D: xx&amp;lt;/code&amp;gt; hinzu.&lt;br /&gt;
Abhängig vom Timing kann dies zu &amp;quot;verwurschtelten&amp;quot; Darstellungen führen.&lt;br /&gt;
Die Verwendung von &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; in Verbindung mit &amp;lt;code&amp;gt;dewpoint&amp;lt;/code&amp;gt; ist daher nicht empfohlen.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
Die Routine wird in eine lokale Programmdatei integriert, z.B. &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; (siehe [[99 myUtils anlegen]]).&lt;br /&gt;
Wird die Funktion dort mit einem externen Editor eingefügt, muss anschließend &amp;lt;code&amp;gt;reload 99_myUtils.pm&amp;lt;/code&amp;gt; ausgeführt werden.&lt;br /&gt;
Auf Fehlermeldungen im fhem.log achten. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
#### Log-abriss vermeiden&lt;br /&gt;
# called by&lt;br /&gt;
# define addLog notify addLog {addLog(&amp;quot;ez_Aussensensor&amp;quot;,&amp;quot;state&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;humidity&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;pressure&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;temperature&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;wind_chill&amp;quot;);;}&lt;br /&gt;
# define a_midnight1 at *23:59 trigger addLog&lt;br /&gt;
# define a_midnight2 at *00:01 trigger addLog&lt;br /&gt;
sub&lt;br /&gt;
addLog($$) {&lt;br /&gt;
  my ($logdevice, $reading) = @_; # device and reading to be used&lt;br /&gt;
  my $logentry = ReadingsVal($logdevice,$reading,&amp;quot;addLog: invalid reading&amp;quot;);&lt;br /&gt;
  if ($reading =~ m,state,i) {&lt;br /&gt;
    fhem &amp;quot;trigger $logdevice $logentry   &amp;lt;&amp;lt; addLog&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    fhem &amp;quot;trigger $logdevice $reading: $logentry   &amp;lt;&amp;lt; addLog&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu Problemen mit diesem Code, der auch die Sonderbehandlung des speziellen FHEM-Readings &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; sicherstellen soll, in Verbindung mit anderen Readingnamen, die den Bestandteil &amp;quot;state&amp;quot; in beliebiger Groß-/Kleinschreibung und an beliebiger Position beinhalten siehe {{Link2Forum|Topic=92111|LinkText=dieses Forenthema}} mit Lösungsansätzen.&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
Um Plot-Abrisse zu vermeiden, kann man auch [[LogProxy]] verwenden (sofern erforderlich iVm. dem &#039;&#039;createGluedFile&#039;&#039;-Attribut des FileLog-Devices).&lt;br /&gt;
Da das Modul LogProxy direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es bei der Darstellung von Daten auf andere Weise (z.B. [[Grafana]] nicht verwendet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Plot-Abriss_vermeiden&amp;diff=36208</id>
		<title>Plot-Abriss vermeiden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Plot-Abriss_vermeiden&amp;diff=36208"/>
		<updated>2021-11-21T08:39:35Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Alternativen */ Hinweis: LogProxy nur für SVG-Plot Definitionen hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=g|RNText=&#039;&#039;&#039;HINWEIS&#039;&#039;&#039;: Es gibt mittlerweile (12/2019) das Attribut &#039;&#039;addLog&#039;&#039; für [[FileLog]] Devices.     &lt;br /&gt;
This attribute takes a comma-separated list of devspec:reading:maxInterval triples.  You may use regular expressions for reading. The last value of the reading will be written to the logfile, if after maxInterval seconds no event for this device/reading has arrived. &lt;br /&gt;
&lt;br /&gt;
Siehe auch {{Link2Forum|Topic=106489|LinkText=dieses Forenthema}}.}}&lt;br /&gt;
== Attribut addLog ==&lt;br /&gt;
Seit 12/2019 können mit dem Attribut &#039;&#039;addLog&#039;&#039; am [[FileLog]] Device maximale Zeitspannen vorgegeben werden, nach denen der letzte bekannte Wert des Readings erneut in das Logfile übernommen werden soll, sofern zwischenzeitlich kein neuer Wert eingetroffen ist. Im Attribut sind Triplette in der Form &amp;lt;code&amp;gt;devspec:reading:maxInterval&amp;lt;/code&amp;gt; anzugeben, mehrere Einträge durch Komma getrennt. Die betreffenden Devices und Readings können über Regex bestimmt werden.&lt;br /&gt;
&lt;br /&gt;
== Timerbasierte Zusatzeinträge ==&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
Bei Nutzung des Attributs &amp;lt;code&amp;gt;event-on-change&amp;lt;/code&amp;gt; werden Log-Einträge nur bei Werteänderung geschrieben. Dies führt&lt;br /&gt;
# zum Abriss der Logs zum Ende des alten und zum Beginn des neuen Tages&lt;br /&gt;
# zu inadäquat langen Pausen zwischen Logeinträgen, z.B. für &amp;lt;code&amp;gt;actuator&amp;lt;/code&amp;gt;, der z.B. in den Wintermonaten bei Anwesenheit durchgängig 100%, bei Abwesenheit durchgängig 0% betragen kann. Der Wechsel zwischen diesen Werten wird mit langen Flanken dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
Aus diesem Grund wurde die Routine &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; erstellt (siehe [[#Implementierung|Implementierung]]).&lt;br /&gt;
Sie fügt zu definierten Zeitpunkten Einträge im Log hinzu.&lt;br /&gt;
Dadurch sollen die o.g. Effekte vermieden werden.&lt;br /&gt;
Zusätzliche Einträge sind mit dem Anhang &amp;lt;code&amp;gt;&amp;lt;&amp;lt; addLog&amp;lt;/code&amp;gt; gekennzeichnet.&lt;br /&gt;
Der Aufruf erfolgt sinnvollerweise aus einem &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt; oder einem &amp;lt;code&amp;gt;DOIF&amp;lt;/code&amp;gt;.&lt;br /&gt;
Üblich ist der Aufruf für alle Geräte bzw. readings, für die &amp;lt;code&amp;gt;event-on-change&amp;lt;/code&amp;gt; gesetzt ist.&lt;br /&gt;
&lt;br /&gt;
Die Routine hat zwei Aufrufparameter:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
addLog(&amp;lt;devicename&amp;gt;, &amp;lt;reading&amp;gt;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele aus fhem.cfg ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
### jede Stunde einen Eintrag für FHT actuator&lt;br /&gt;
define a_actuator at +*01:00 {addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;)}&lt;br /&gt;
attr a_actuator room 99_System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; für mehrere &amp;lt;code&amp;gt;devices&amp;lt;/code&amp;gt; in einem &amp;quot;Makro&amp;quot; zusammenfassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define addLog notify addLog {addLog(&amp;quot;ez_Aussensensor&amp;quot;,&amp;quot;state&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;measured-temp&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;humidity&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;pressure&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;temperature&amp;quot;);;\&lt;br /&gt;
    addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;wind_chill&amp;quot;);;}&lt;br /&gt;
attr addLog room 99_System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
### Hier ist ein trigger des o.g. notify verwendet, um nicht in beiden at-defines alle Aufrufe listen zu müssen.&lt;br /&gt;
define a_midnight1 at *23:59 trigger addLog&lt;br /&gt;
attr a_midnight1 room 99_System&lt;br /&gt;
define a_midnight2 at *00:01 trigger addLog&lt;br /&gt;
attr a_midnight2 room 99_System&lt;br /&gt;
# Alternativ können auch die Einzelaufrufe direkt im at erfolgen, z.B.&lt;br /&gt;
define a_midnight_before at *23:59 {addLog(&amp;quot;device&amp;quot;,&amp;quot;reading&amp;quot;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiele mit DOIF ===&lt;br /&gt;
Seitdem es [[DOIF]] gibt, lässt sich das Ganze auch etwas anders umsetzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define DF_addLogDaily DOIF ([23:59] or [00:01]) ({addLog(&amp;quot;ez_FHT&amp;quot;, &amp;quot;actuator&amp;quot;)})&lt;br /&gt;
attr DF_addLogDaily room 99_System&lt;br /&gt;
attr DF_addLogDaily do always&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Da mit diesem Aufruf aber die Problematik nur nach unten verschoben wird (Zoom auf Stunde oder Vierteltag),&lt;br /&gt;
ist folgendes möglich:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
define DF_addLogHourly DOIF ([:59] or [:01]) ({addLog(&amp;quot;ez_FHT&amp;quot;, &amp;quot;actuator&amp;quot;)})&lt;br /&gt;
attr DF_addLogHourly room 99_System&lt;br /&gt;
attr DF_addLogHourly do always&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Ganze lässt sich auch noch auf minütlich runterbrechen, erzeugt dadurch ggf. eine große Menge Logeinträge. Dies sollte man stets bedenken.&lt;br /&gt;
&lt;br /&gt;
=== Log-Beispiele ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
2012-11-04_23:46:28 ez_Aussensensor T: 9.4 H: 78.5&lt;br /&gt;
2012-11-04_23:59:00 ez_Aussensensor T: 9.4 H: 78.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-04_23:59:00 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-04_23:59:00 ez_FHT measured-temp: 17.4   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_Aussensensor T: 9.4 H: 78.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:01:00 ez_FHT measured-temp: 17.4   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:24:31 ez_FHT actuator: 0%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_00:42:32 ez_Aussensensor T: 9.1 H: 78.1&lt;br /&gt;
2012-11-05_16:02:59 ez_Aussensensor T: 10.3 H: 65.9&lt;br /&gt;
2012-11-05_16:05:56 ez_Aussensensor T: 10.2 H: 66.3&lt;br /&gt;
2012-11-05_16:21:47 ez_Aussensensor T: 10.2 H: 66.3   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:21:48 ez_FHT actuator: 100%   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:21:48 ez_FHT measured-temp: 18.5   &amp;lt;&amp;lt; addLog&lt;br /&gt;
2012-11-05_16:30:26 ez_FHT measured-temp: 18.7&lt;br /&gt;
2012-11-05_16:44:18 ez_Aussensensor T: 9.9 H: 65.8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nebeneffekte ===&lt;br /&gt;
&amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; verwendet die Funktion &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt;.&lt;br /&gt;
Für fhem ist das gleichwertig mit dem Eintreffen eines Ereignisses.&lt;br /&gt;
Es werden also ggf. alle &amp;lt;code&amp;gt;notifies&amp;lt;/code&amp;gt; ausgeführt, die für das relevante Gerät abzuarbeiten sind.&lt;br /&gt;
Dies ist wohl zu bedenken, bevor man &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Probleme ===&lt;br /&gt;
Das Modul [[dewpoint]] fügt dem &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; eines &amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt; den zusatz &amp;lt;code&amp;gt;D: xx&amp;lt;/code&amp;gt; hinzu.&lt;br /&gt;
Abhängig vom Timing kann dies zu &amp;quot;verwurschtelten&amp;quot; Darstellungen führen.&lt;br /&gt;
Die Verwendung von &amp;lt;code&amp;gt;addLog&amp;lt;/code&amp;gt; in Verbindung mit &amp;lt;code&amp;gt;dewpoint&amp;lt;/code&amp;gt; ist daher nicht empfohlen.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
Die Routine wird in eine lokale Programmdatei integriert, z.B. &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; (siehe [[99 myUtils anlegen]]).&lt;br /&gt;
Wird die Funktion dort mit einem externen Editor eingefügt, muss anschließend &amp;lt;code&amp;gt;reload 99_myUtils.pm&amp;lt;/code&amp;gt; ausgeführt werden.&lt;br /&gt;
Auf Fehlermeldungen im fhem.log achten. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
#### Log-abriss vermeiden&lt;br /&gt;
# called by&lt;br /&gt;
# define addLog notify addLog {addLog(&amp;quot;ez_Aussensensor&amp;quot;,&amp;quot;state&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;ez_FHT&amp;quot;,&amp;quot;actuator&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;humidity&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;pressure&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;temperature&amp;quot;);;\&lt;br /&gt;
#            addLog(&amp;quot;MunichWeather&amp;quot;,&amp;quot;wind_chill&amp;quot;);;}&lt;br /&gt;
# define a_midnight1 at *23:59 trigger addLog&lt;br /&gt;
# define a_midnight2 at *00:01 trigger addLog&lt;br /&gt;
sub&lt;br /&gt;
addLog($$) {&lt;br /&gt;
  my ($logdevice, $reading) = @_; # device and reading to be used&lt;br /&gt;
  my $logentry = ReadingsVal($logdevice,$reading,&amp;quot;addLog: invalid reading&amp;quot;);&lt;br /&gt;
  if ($reading =~ m,state,i) {&lt;br /&gt;
    fhem &amp;quot;trigger $logdevice $logentry   &amp;lt;&amp;lt; addLog&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    fhem &amp;quot;trigger $logdevice $reading: $logentry   &amp;lt;&amp;lt; addLog&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu Problemen mit diesem Code, der auch die Sonderbehandlung des speziellen FHEM-Readings &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; sicherstellen soll, in Verbindung mit anderen Readingnamen, die den Bestandteil &amp;quot;state&amp;quot; in beliebiger Groß-/Kleinschreibung und an beliebiger Position beinhalten siehe {{Link2Forum|Topic=92111|LinkText=dieses Forenthema}} mit Lösungsansätzen.&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
Um Plot-Abrisse zu vermeiden, kann man auch [[LogProxy]] verwenden (sofern erforderlich iVm. dem &#039;&#039;createGluedFile&#039;&#039;-Attribut des FileLog-Devices).&lt;br /&gt;
Da das Modul logProxy direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es bei der Darstellung von Daten auf andere Weise (z.B. [[Grafana]] nicht verwendet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36207</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36207"/>
		<updated>2021-11-21T08:29:24Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Hinweis für &amp;quot;Plot-Abrisse vermeiden&amp;quot; hinzugefügt.&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=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner=timmib ({{Link2FU|41939|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Dieser Artikel befindet sich im Aufbau und beschreibt daher anstatt einer kompletten Konfiguration bislang nur Teilabschnitte.}}&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Genauso, wie das Modul {{Link2CmdRef|Lang=de|Anker=DbLog|Label=DbLog}} lassen sich mit dem Modul {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf den Artikel über das Modul [[DbLog]] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur numerische Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. Textbasierte Werte können aber auch durch numerische Werte ersetzt werden. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InflixDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InflixDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung einer Datenbank ===&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=myusername&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=passwordpasswordpassword&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=myorg&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=mybucket&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch bei ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist fhem über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Loggers als Device ===&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2&lt;br /&gt;
* &#039;&#039;dbname&#039;&#039; dem vergebenen Bucket entspricht.&lt;br /&gt;
* Das Attribut api=v2 die InfluxDV Version 2 festlegt.&lt;br /&gt;
* Das Attribut org=myorg die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token die Verwendung eines Tokens festlegt.&lt;br /&gt;
&lt;br /&gt;
Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bin mir nicht sicher, ob das Setzen eines Passwords und Users in Verbindung mit der oben beschriebenen Authentifizierungsmethodik (v2 mit Token) dazu führt, dass die Authentifizierung damit fehlschlägt.&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
{{Todo|Todo}}&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;
{{Todo|Todo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] und Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
== Zusätzliches ==&lt;br /&gt;
=== Plot-Abrisse vermeiden ===&lt;br /&gt;
Mit der Verwendung einer vollkommen neuen Datenverarbeitung, wird auch die Problematik der Plot-Abrisse an Datumsübergängen wieder zum Thema. Da das Modul [[logProxy]] direkt auf der Ebene der Darstellung (SVG-Plot Definition) ansetzt, kann es hier nicht eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Modul InfluxDBLogger besitzt allerdings selbst die notwendige Funktionalität, um die aktuellen Werte der konfigurierten Readings der konfigurierten Geräte in die Datenbank zu schreiben (Verweis auf die Commandref von {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} für weitere Details).&lt;br /&gt;
&lt;br /&gt;
Ein entsprechendes DOIF müsste dann so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define addlog DOIF ([23:59:59] or [00:00:00])(set influxDB write)&lt;br /&gt;
attr addlog do always&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36206</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36206"/>
		<updated>2021-11-20T22:20:20Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kleinigkeitenkorrektur&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=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner=timmib ({{Link2FU|41939|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Dieser Artikel befindet sich im Aufbau und beschreibt daher anstatt einer kompletten Konfiguration bislang nur Teilabschnitte.}}&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Genauso, wie das Modul {{Link2CmdRef|Lang=de|Anker=DbLog|Label=DbLog}} lassen sich mit dem Modul {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf den Artikel über das Modul [[DbLog]] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur numerische Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. Textbasierte Werte können aber auch durch numerische Werte ersetzt werden. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InflixDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InflixDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung einer Datenbank ===&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=myusername&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=passwordpasswordpassword&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=myorg&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=mybucket&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch bei ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist fhem über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Loggers als Device ===&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2&lt;br /&gt;
* &#039;&#039;dbname&#039;&#039; dem vergebenen Bucket entspricht.&lt;br /&gt;
* Das Attribut api=v2 die InfluxDV Version 2 festlegt.&lt;br /&gt;
* Das Attribut org=myorg die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token die Verwendung eines Tokens festlegt.&lt;br /&gt;
&lt;br /&gt;
Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bin mir nicht sicher, ob das Setzen eines Passwords und Users in Verbindung mit der oben beschriebenen Authentifizierungsmethodik (v2 mit Token) dazu führt, dass die Authentifizierung damit fehlschlägt.&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
{{Todo|Todo}}&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;
{{Todo|Todo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] und Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36205</id>
		<title>InfluxDBLogger</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=InfluxDBLogger&amp;diff=36205"/>
		<updated>2021-11-20T21:54:05Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Neue Seite für InfluxDBLogger&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=Unterstützende Dienste&lt;br /&gt;
|ModTechName=93_InfluxDBLogger.pm&lt;br /&gt;
|ModOwner=timmib ({{Link2FU|41939|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Todo|Dieser Artikel befindet sich im Aufbau und beschreibt daher anstatt einer kompletten Konfiguration bislang nur Teilabschnitte.}}&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Genauso, wie das Modul {{Link2CmdRef|Lang=de|Anker=DbLog|Label=DbLog}} lassen sich mit dem Modul {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}} Daten in einer Datenbank speichern.&lt;br /&gt;
&lt;br /&gt;
Für die Vorteile der Speicherung von Daten in einer Datenbank sei auf den Artikel über das Modul [[DbLog]] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Einer der größten Unterschiede zu einer SQL-Datenbank ist die Tatsache, dass influxDB speziell darauf ausgelegt ist, große Messdatenmengen in kurzer Zeit zusammen mit einem Zeitstempel des Messzeitpunkts zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist ein sehr wichtiger Unterschied, dass nur Werte verarbeitet werden. Dies kann die Kombination mit anderen Loggingmethodiken situationsabhängig sinnvoll machen. &lt;br /&gt;
&lt;br /&gt;
Ein Interface oder eine Möglichkeit, die Daten mittels SVG-Plots darzustellen ist derzeit nicht vorhanden. Alternativ können die Daten mittels [[Grafana]] analysiert und visualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Für die Beschreibung der Einrichtung als native Installation in Verbindung mit einer InflixDB 1.x sei auf [https://waschto.eu/2018/11/02/fhem-und-grafana-tool-zum-visualisieren-von-messdaten/ diesen Artikel] verwiesen.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird auf die Einrichtung unter Docker (inkl. Docker-Compose) mit einer InflixDB 2.0 eingegangen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung einer Datenbank ===&lt;br /&gt;
Voraussetzungen:&lt;br /&gt;
* Eine laufende Docker-Umgebung (inkl. Docker-Compose)&lt;br /&gt;
* Ein FHEM Docker-Image mit source Dateien im Unterordner ./fhem/build&lt;br /&gt;
* Die FHEM Konfiguration im Unterordner ./fhem/conf&lt;br /&gt;
* Das folgende file &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; im Ausgangsordner&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version: &#039;2.4&#039;&lt;br /&gt;
services:&lt;br /&gt;
&lt;br /&gt;
  fhem2:&lt;br /&gt;
    container_name: fhem2&lt;br /&gt;
    build: ./fhem/build&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8083:8083&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - influxdb&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./fhem/conf:/opt/fhem&lt;br /&gt;
    environment: &lt;br /&gt;
      - FHEM_UID=1000&lt;br /&gt;
      - FHEM_GID=1000&lt;br /&gt;
      - FHEM_PERM_DIR=0750&lt;br /&gt;
      - FHEM_PERM_FILE=0640&lt;br /&gt;
&lt;br /&gt;
  influxdb:&lt;br /&gt;
    image: influxdb:latest&lt;br /&gt;
    restart: always&lt;br /&gt;
    ports:&lt;br /&gt;
      - 8086:8086&lt;br /&gt;
    volumes:&lt;br /&gt;
      # Mount for influxdb data directory and configuration&lt;br /&gt;
      - ./influxdb/data:/var/lib/influxdb2:rw&lt;br /&gt;
      - ./influxdb/config:/etc/influxdb2:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_MODE=setup&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_USERNAME=myusername&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_PASSWORD=passwordpasswordpassword&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ORG=myorg&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_BUCKET=mybucket&lt;br /&gt;
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mytoken&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unterverzeichnisse für die InfluxDB Datenbank (./influxdb/data), sowie die Konfiguration (./influxdb/config) werden automatisch bei ersten Starten erstellt.&lt;br /&gt;
&lt;br /&gt;
Der Eintrag &amp;quot;DOCKER_INFLUXDB_INIT_MODE=setup&amp;quot; führt dazu, dass die Datenbank beim ersten Starten initialisiert wird, dieses aber nur, falls keine Datenbank gefunden wird. So kann dieser Eintrag für die spätere Verwendung in der Konfiguration verbleiben und muss nicht entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Konfiguration ist fhem über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8083&amp;lt;/code&amp;gt; erreichbar, das Webinterface von InfluxDB über &amp;lt;code&amp;gt;&amp;lt;ip-des-docker-servers&amp;gt;:8086&amp;lt;/code&amp;gt; erreichbar.&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration kann über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet, bzw. über&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Loggers als Device ===&lt;br /&gt;
Das InfluxDBLogger Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Device-name&amp;gt; InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec,devspec,&amp;lt;weitere devspec&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei bei der Verwendung der InfluxDB Version 2&lt;br /&gt;
* &#039;&#039;dbname&#039;&#039; dem vergebenen Bucket entspricht.&lt;br /&gt;
* Das Attribut api=v2 die InfluxDV Version 2 festlegt.&lt;br /&gt;
* Das Attribut org=myorg die vergebene Org festlegt.&lt;br /&gt;
* Das Attribut security=token die Verwendung eines Tokens festlegt.&lt;br /&gt;
&lt;br /&gt;
Der Token wird über &amp;lt;code&amp;gt; set &amp;lt;Device-name&amp;gt; token &amp;lt;mytoken&amp;gt;&amp;lt;/code&amp;gt; festlegt.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Konfiguration wäre:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define influxDB InfluxDBLogger http://10.10.120.106:8086 FHEM-bucket DB_Temp_Hum,KU_Temp_Hum,FL_Temp_Hum&lt;br /&gt;
attr influxDB api v2&lt;br /&gt;
attr influxDB org myorg&lt;br /&gt;
attr influxDB security token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bin mir nicht sicher, ob das Setzen eines Passwords und Users in Verbindung mit der oben beschriebenen Authentifizierungsmethodik (v2 mit Token) dazu führt, dass die Authentifizierung damit fehlschlägt.&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
{{Todo|Todo}}&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;
{{Todo|Todo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Da in Abhängigkeit von Events Einträge in die Datenbank geschrieben werden, lassen sich die gleichen Prinzipien anwenden, wie bei [[DbLog]] und [[FileLog]] und Events zu unterdrücken:&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme :&lt;br /&gt;
* influxDB 1.x&lt;br /&gt;
* influxDB 2.x&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=36204</id>
		<title>DbLog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=36204"/>
		<updated>2021-11-20T19:55:44Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Hinweis zur Alternative InfluxDBLogger hinzugefügt.&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]])&amp;lt;br /&amp;gt;DS_Starter ({{Link2FU|16933|Forum}}/[[Benutzer Diskussion:DS_Starter|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Mit der Zeit entstehen in FHEM recht umfangreiche Log-Daten für die verschiedensten konfigurierten Devices. Die übliche Einstiegs-[[Konfiguration]] sieht vor, dass die Logs als {{Link2CmdRef|Lang=de|Anker=FileLog|Label=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 {{Link2CmdRef|Lang=de|Anker=DbLog|Label=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;
Eine weitere Alternative bietet {{Link2CmdRef|Lang=de|Anker=InfluxDBLogger|Label=InfluxDBLogger}}, was allerdings in einem anderen Artikel für das Modul [[InfluxDBLogger]] behandelt wird.&lt;br /&gt;
&lt;br /&gt;
;Hinweis:&lt;br /&gt;
Reporting und Management von DbLog-Datenbankinhalten kann mit dem Modul [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] stattfinden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Datenbank-Anbindung mittels db.conf ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=&#039;&#039;&#039;Anmerkung&#039;&#039;&#039;: MariaDB10 nutzt nicht Port 3306 sondern 3307. Dies ist zum Beispiel bei Synology NAS der Fall.}}&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;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown fhem:dialout /opt/fhem/db.conf&amp;lt;/syntaxhighlight&amp;gt;&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;
Unbedingt beachten: bei Verwendung des Moduls configdb wird die Konfigurationsdatei aus der &#039;&#039;&#039;&#039;&#039;Datenbank&#039;&#039;&#039;&#039;&#039; gelesen. Deshalb ist es erforderlich, die Datei mittels &amp;lt;code&amp;gt;configdb fileimport db.conf &amp;lt;/code&amp;gt; vorher zu importieren !&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 mehrere 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;
* Ausschluß von Device/Reading-Kombinationen über das Attribut &amp;quot;excludeDevs&amp;quot;. Es können {{Link2CmdRef|Anker=devspec|Lang=de|Label=devspec}} verwendet werden. &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. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&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 {{Link2CmdRef}}.&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;Achtung: Die Tabelle &amp;quot;current&amp;quot; wird nur befüllt, wenn das Attribut DbLogType auf Current oder Current/History gesetzt ist.&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 oder Auswertungen mit [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] anzufertigen&lt;br /&gt;
&lt;br /&gt;
{{Todo|Ausbauen}}&lt;br /&gt;
&lt;br /&gt;
Um Problem beim Import von cacheFiles zu vermeiden, kann in der Datenbank ein PK angelegt werden, welcher Timestamp, Device und Reading umfasst. Dadurch werden doppelte Einträge wirksam verhindert.&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/)&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;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;&#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 history (TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE TABLE current (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP);&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;&#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 600 /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;&#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;&#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;&#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;&#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;&#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;
== Beispiel: Anlegen und Nutzung einer Mysql-Datenbank ==&lt;br /&gt;
Hierfür gibt es eine [[DbLog-MySQL|extra Seite]], die die Unterschiede und Feinheiten zwischen den verschiedenen Versionen berücksichtigt&lt;br /&gt;
&lt;br /&gt;
Anstatt nano kann jeder andere kompatible Editor verwendet werden. Weiterhin bitte beachten, dass die hier genannten Befehle teilweise root-Rechte voraussetzen. Entweder komplett als root arbeiten, oder mittels sudo.&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;
 cd /opt/fhem/contrib/dblog/&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;
Anscheinend gibt es bei der neuen Version MariaDB (im Gegensatz zu mysql) ein neues Anmeldeverfahren, so dass in der Datenbank selbst Veränderungen vorgenommen werden müssen, damit der Zugriff durch FHEM funktioniert: https://kofler.info/root-login-problem-mit-mariadb/&lt;br /&gt;
&lt;br /&gt;
Die Daten im MySQL können auch für die längere Aufbewahrung partitioniert werden. Dabei wird pro Partition eine Datei erzeugt statt einer gemeinsamen Datei für alle Daten. Je nach Wunsch zum Beispiel partitioniert nach Jahr.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Alter table history PARTITION BY RANGE ( UNIX_TIMESTAMP(timestamp) ) (&lt;br /&gt;
    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2019-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2020-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2021-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2022-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2023-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2024-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2025-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p7 VALUES LESS THAN (MAXVALUE) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Abfragescript PHP/MySQL ==&lt;br /&gt;
Um eine schnelle Übersicht zu bekommen habe ich mir dieses Script geschrieben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php $pdo = new PDO(&#039;mysql:host=localhost;dbname=fhem&#039;, &#039;fhemuser&#039;, &#039;fhempasswort&#039;);&lt;br /&gt;
echo &#039;&amp;lt;h2&amp;gt;Tabelle Current&amp;lt;/h1&amp;gt;&amp;lt;br&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Anzahl&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Readings&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
$sql = &amp;quot;SELECT COUNT(*), DEVICE, GROUP_CONCAT(DISTINCT READING ORDER BY READING DESC SEPARATOR &#039;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&#039;) FROM current GROUP BY DEVICE;&amp;quot;; foreach ($pdo-&amp;gt;query($sql) as&lt;br /&gt;
$row) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[0] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[1] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&amp;quot; . $row[2] . &amp;quot;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;h2&amp;gt;Tabelle History&amp;lt;/h1&amp;gt;&amp;lt;br&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Anzahl&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
$sql = &amp;quot;SELECT COUNT(*), DEVICE FROM history GROUP BY DEVICE;&amp;quot;; foreach ($pdo-&amp;gt;query($sql) as&lt;br /&gt;
$row) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[0] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[1] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte passt &#039;&#039;fhemuser&#039;&#039; und &#039;&#039;fhempasswort&#039;&#039; an. Das Ganze kommt dann nach &amp;lt;code&amp;gt;/var/www/html/fhemdb.php&amp;lt;/code&amp;gt; und ist mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;IP&amp;gt;/fhemdb.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aufrufbar. Wenn ihr den zweiten Block für die history Tabelle ausklammert oder entfernt, läuft das Script viel schneller ab - klar die history Tabelle ist meist randvoll.&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;
== 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 insbesondere auch dann hilfreich, wenn man eigene 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 {{Link2CmdRef|Lang=de|Anker=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 FHEM stoppt, um Datenfehler zu vermeiden). Eine Datenbank kann bearbeitet werden, ohne FHEM stoppen zu müssen. &lt;br /&gt;
&lt;br /&gt;
Datenbanken kann man ohne weitere 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;
=== 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;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ist ein DbRep-Device definiert, kann eine Reparatur einfach mit dem eingebauten Befehl &#039;&#039;&#039;set &amp;lt;name&amp;gt; repairSQlite&#039;&#039;&#039; ausgeführt werden.&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;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;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;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;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;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;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;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;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;
=== Hinweise für sehr große Datenbanken ===&lt;br /&gt;
Wenn die SQLite-DB sehr groß wird, kann es sein, dass der oben beschriebene Weg nicht ohne manuelle Anpassungen funktioniert. Konkret war dies bei einem Nutzer für eine 15 GB große DB nicht möglich, der Prozess hat sich immer nach mehreren Stunden aufgehängt. Die Ursache liegt darin, dass ein Dump alle Daten in einer einzigen Transaktion einfügt. Das Problem kann man lösen, indem man den Dump in mehreren Transaktionen einfügt, also aufteilt. Konkret konnte eine 23GB große DB erfolgreich eingelesen und damit repariert werden, indem alle 10.000.000 Zeilen folgende 2 Zeilen eingefügt wurden:&lt;br /&gt;
&amp;lt;pre&amp;gt;BEGIN TRANSACTION;&lt;br /&gt;
COMMIT;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Hinweis 1: Mit dem Editor joe kann man unter Linux auch sehr große Dateien flüssig bearbeiten, das Springen zu hohen Zeilennumer dauert trotzdem. &lt;br /&gt;
* Hinweis 2: joe verwendet eine temporäre Kopie der Datei. Diese liegt per default unter /tmp. Der Ort kann aber auch durch &amp;lt;code&amp;gt;export TEMP=...&amp;lt;/code&amp;gt; geändert werden. Falls also unter /tmp nicht Platz für eine Kopie des Datenbank-Dumps ist, sollte diese Variable vor dem Starten von joe entsprechend gesetzt werden. &lt;br /&gt;
* Hinweis 3: Beim Speichern legt joe im gleichen Verzeichnis eine Sicherungskopie an, d.h. im Verzeichnis des Datenbank-Dumps sollte weiterer Platz in Höhe der Dateigröße frei sein. &lt;br /&gt;
* Hinweis 4: Der reopen Mechanismus von DbLog kann verwendet werden, um eine manuelle Datenbankreparatur ohne Logunterbrechung durchzuführen (vor dem Wieder-Öffnen der DbLog Datei- und Verzeichnisrechte prüfen!). Damit kann man das harte Stoppen und Starten von FHEM in obiger Anleitung umgehen.&lt;br /&gt;
* Letzter Hinweis: Weiter gilt: bei großen DbLog-Datenbanken sollte man immer darüber nachdenken,&lt;br /&gt;
** Welche dieser Logdaten man wirklich braucht und im Zweifel per DbRep ausdünnen&lt;br /&gt;
** Zu einer echten Datenbank wie MySQL/MariaDB zu wechseln.&lt;br /&gt;
&lt;br /&gt;
== Datenbank migrieren ==&lt;br /&gt;
Eine schöne Anleitung zur Migration von SQLite zu MySQL/MariaDB mit Hilfe von [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] findet sich hier: [https://demaya.de/fhem-umzug-sqlite-mysql-mariadb/].&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;
&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:reduceLogState.* { (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;
Die oben beschriebene Möglichkeit ist für SQLite verwendbar. Zur Ermittlung der DB-Größe andere DB-Typen (aber auch für SQLite nutzbar) kann wie [[DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Gr.C3.B6.C3.9Fe_der_FHEM-Datenbank_ermitteln | hier]] beschrieben vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
== Performance-Optimierung ==&lt;br /&gt;
Auch eine Datenbank kann mit der Zeit langsamer werden. Dies hängt von mehreren Faktoren ab:&lt;br /&gt;
* Menge der gelogten Daten (zB. &amp;gt; 4-5 GB)&lt;br /&gt;
* Eingesetzte Hardware (zB. langsame SD-Karte vs. schnelle SSD)&lt;br /&gt;
* Eingesetztes Datenbanksystem (zB. SQLite, MySQL)&lt;br /&gt;
* Komplexität der Abfragen (zB. für aufwändige Graphen oder Berechnungen)&lt;br /&gt;
&lt;br /&gt;
Diese Punkte sollen im folgenden diskutiert werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Komplexität der Abfragen ===&lt;br /&gt;
Dies ist kein Problem der Datenbank, sondern rein der Abfrage. Dem entsprechend muss die Optimierung auch in der Abfrage oder im Skript gesucht werden. Dies ist nicht Ziel dieses Abschnittes und wird hier nicht weiter behandelt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eingesetztes Datenbanksystem ===&lt;br /&gt;
Welches Datenbanksystem eingesetzt wird (zB. SQLite oder MySQL) hat auf die Performance der Datenbank gar keinen so großen Einfluss, wie vielleicht zuerst gedacht. Selbst SQLite kann problemlos Datenbanken mit etlichen GB Größe performant verarbeiten. Der Flaschenhals ist hier viel mehr die darunter liegende Hardware (s.u.).&lt;br /&gt;
&lt;br /&gt;
Die Performance der Datenbank an sich, kann aber durch verschiedene Maßnahmen verbessert werden:&lt;br /&gt;
* Pflegemaßnahmen bzgl. der Daten&lt;br /&gt;
* &#039;&#039;&#039;Erstellung von Indizes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Menge der Daten und Pflegemaßnahmen bzgl. der Daten ====&lt;br /&gt;
Die Menge der geloggten Daten hat natürlich Einfluss auf die Geschwindigkeit von Abfragen - je mehr Daten vorhanden sind, desto mehr Daten müssen auch durchforstet werden um eine Abfrage zu bedienen. Die Reduzierung der geloggten Datenmenge hat also direkten Einfluss auf die Größe und damit auch die Geschwindigkeit der Datenbank. Die Menge der zu loggenden Daten lässt sich an zwei Stellen einschränken:&lt;br /&gt;
* bei der Definition jedes Devices (s. Kapitel oben)&lt;br /&gt;
* bei der Festlegung des FHEM-weiten Log-Levels (s. [[Loglevel]])&lt;br /&gt;
&lt;br /&gt;
Die Menge der bereits geloggten Daten kann zB. mit Hilfe von [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] verringert und optimiert werden, bspw.&lt;br /&gt;
* löschen unnötiger Daten&lt;br /&gt;
* vacuum der Datenbank&lt;br /&gt;
&lt;br /&gt;
Insgesamt haben diese Maßnahmen aber nur einen eingeschränkten Effekt auf die Performance der DB. Deutlich effektiver ist die Erstellung eines Index (s.u.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Erstellung von Indizes ====&lt;br /&gt;
Die Erstellung von Indizes hat mit Abstand den größten Einfluss auf die Performance einer Datenbank (auf unveränderter Hardware). Extrem zusammengefasst ist ein Index eine extrem optimiertes Nachschlageverzeichnis für einen bestimmten Typ Daten (ein Index wie im Buch halt). Eine wunderbare Einführung in Indizes bietet [[https://use-the-index-luke.com/de|https://use-the-index-luke.com]].&lt;br /&gt;
&lt;br /&gt;
In FHEM sind Indizes sogar sehr einfach einzurichten da die Datenbank-Nutzung sehr stark vorgegeben ist. Nahezu jede Abfrage folgt dem Schema &#039;&#039;Device -&amp;gt; Reading -&amp;gt; Datum -&amp;gt; Wert&#039;&#039;. Ein Index kann genau diese Abfrage bedienen und beschleunigen. Ein Index nur über die Devices wäre ein erster Schritt, brächte aber noch keinen großen Gewinn (wie um Link oben gut beschrieben). Über die gesamten ersten drei Schritte erstellt (Device -&amp;gt; Reading -&amp;gt; Datum) bringt der Index aber sofort eine deutliche Geschwindigkeitssteigerung.&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines Index erfolgt direkt in der Datenbank (und nicht aus FHEM heraus), hier am Beispiel einer SQLite-DB:&lt;br /&gt;
&lt;br /&gt;
Öffnen der DB:&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo sqlite3 fhem.db &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugen des Index auf der DB-Konsole (das Semikolon am Ende ist wichtig):&lt;br /&gt;
&amp;lt;pre&amp;gt; create index idx_device_reading_timestamp on history (device, reading, timestamp); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlassen der DB:&lt;br /&gt;
&amp;lt;pre&amp;gt; .exit &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einzig zu berücksichtigen ist, dass dieser Index die Datenbank um bis zu 1/3 vergrößert. Er kann aber bei Bedarf auch wieder entfernt werden. Bei meiner 15 GB SQLite-Datei (auf einem Mac Mini mit SSD) hat dies ca. 15 min gedauert (den FHEM hatte ich vorsichtshalber währenddessen deaktiviert).&lt;br /&gt;
&lt;br /&gt;
Sollte jemand spezielle Berechnungen oder Skripte ausführen, die nach einem anderen Abfrage-Schema arbeiten, könnte man dafür spezialisierte zusätzliche Indizes erstellen. Das sollte aber dann mit dem Wissen des obigen Links erarbeitet werden, da dann etwas mehr Hintergrundwissen sehr hilfreich ist.&lt;br /&gt;
&lt;br /&gt;
==== DB-Backup ====&lt;br /&gt;
Ein anderer Aspekt, der eigentlich nichts mit der Performance der DB zu tun hat, ist der Einfluss aufs Backup. Wird bspw. ein Systembackup per RSYNC gemacht, muss bei SQLite immer die komplette ggf. riesige Datei gesynct werden - bei MySQL würden nur die veränderten DB-Elemente gesynct. Dies soll hier nicht weiter vertieft werden, sollte aber bei einer Gesamtstrategie bedacht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eingesetzte Hardware ===&lt;br /&gt;
FHEM hat grundsätzlich sehr viele kleine Datenzugriffe, unabhängig davon ob FileLog oder DbLog eingesetzt wird. Deshalb ist der absolut größte Performance-Gewinn durch den Einsatz schneller Festplatten zu erreichen - ganz einfache Aussage: &#039;&#039;je schneller desto besser ;-)&#039;&#039;. Konkret bietet eine SSD mit mind. 250MB/s Datenzugriff eine ordentliche Basis für jedes datengestützte System, wie den FHEM.&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenmenge größer und die Abfragen komplexer werden, müssen natürlich irgendwann auch die Prozessorleistung und der Arbeitsspeicher mit wachsen. Aber auch an einem Raspi wird eine SSD deutlich performanter sein, als eine einfache SD-Karte oder eine klassische rotierende Festplatte.&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;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=33399</id>
		<title>HM-TC-IT-WM-W-EU Funk-Wandthermostat AP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=33399"/>
		<updated>2020-06-21T08:41:50Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Links aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-TC-IT-WM-W-EU.jpg&lt;br /&gt;
|Bildbeschreibung=HM-TC-IT-WM-W-EU mit Standard-Einstellungen&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]]&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=7&lt;br /&gt;
|HWVoltage=3 V&lt;br /&gt;
|HWPowerConsumption=40 mA (max)&lt;br /&gt;
|HWPoweredBy=2 x LR6/Mignon/AA&lt;br /&gt;
|HWSize=ohne Rahmen: 55&amp;amp;#8239;x&amp;amp;#8239;55&amp;amp;#8239;x&amp;amp;#8239;20&amp;amp;nbsp;mm&amp;lt;br /&amp;gt;mit Rahmen: 86&amp;amp;#8239;x&amp;amp;#8239;86&amp;amp;#8239;x&amp;amp;#8239;21,5&amp;amp;nbsp;mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HomeMatic-Wandthermostat Aufputz. Verfügbar seit Februar 2014. Nachfolger des [[HM-CC-TC_Funk-Wandthermostat|HM-CC-TC]].&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Allgemeine Informationen, die alle HomeMatic Thermostate betreffen, sind unter [[HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat&#039;&#039;&#039; misst die Raumtemperatur und Luftfeuchtigkeit. Er verfügt über individuell einstellbare Wochenprogramme und Programmierung direkt am Gerät. Zusätzlich ist auch eine Boost-Funktion vorhanden (ermöglicht ein schnelles, kurzzeitiges Aufheizen des Heizkörpers). Er verfügt über ein eigenes Anzeigedisplay für Soll- und Isttemperatur sowie Luftfeuchtigkeit. Er kann mittels Klebestreifen irgendwo aufgeklebt werden, soll aber auch in Mehrfachrahmen von Berker, ELSO, Gira, Merten und JUNG passen.&lt;br /&gt;
&lt;br /&gt;
Der Hauptnutzen gegenüber den Heizkörperthermostaten besteht neben einer weitaus bequemeren Bedienung und der möglichen Anzeige von Istwerten von Temperatur und Luftfeuchte auch in einer Entkopplung der Raumtemperaturreglung aus der räumlichen Nähe des Heizkörpers. Zusätzlich oder alternativ zur Heizkörpersteuerung ist auch die Anbindung von Fußbodenheizung oder anderen Wärmequellen über einen funkgesteuerten Schaltaktor durch einen separaten Schaltkanal möglich.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Versorgungsspannung: 2 Stck. 1,5 V LR03/Micro/AAA&lt;br /&gt;
* Stromaufnahme (max.): 40 mA&lt;br /&gt;
* Schutzart: IP20&lt;br /&gt;
* Schutzklasse: III&lt;br /&gt;
* Abmessungen (BxHxT ohne Rahmen): 55 x 55 x 20 mm&lt;br /&gt;
* Abmessungen (BxHxT mit Rahmen): 86 x 86 x 21,5 mm&lt;br /&gt;
* Gewicht (ohne Batterien): 74 g&lt;br /&gt;
* Temperaturwahl in Schritten von: 0,5 °C&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum HM-CC-TC kann der HM-TC-IT-WM-W-EU auch andere HomeMatic-Schaltaktoren (z.B. [[HM-LC-SW1-FM_Schaltaktor_1-fach_UP|HM-LC-SW1-FM]]) über den Channel 07 SwitchTr direkt anlernen, womit z.B. die Steuerung elektrischer Heizungen möglich wird. Der HM-CC-TC konnte direkt nur die HM-CC-VD steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Grundsätzlich sind speziell bei der Ansteuerung von [[HM-CC-RT-DN Funk-Heizkörperthermostat]] zwei Betriebsarten mit FHEM denkbar.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung nur über den Wandthermostat ===&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle [[HM-CC-RT-DN Funk-Heizkörperthermostat]]e mit dem HM-TC-IT-WM-W-EU Funk-Wandthermostat verbunden wie in den Handbüchern beschrieben (dort &amp;quot;verknüpfen&amp;quot; genannt, technisch handelt es sich um eine peering).&lt;br /&gt;
Dazu muss die mittlere Taste der Heizkörper Ventile länger als 3 Sekunden gedrückt werden, ebenso das Einstellrad am Wandthermostat. Die &amp;quot;Verknüpfung&amp;quot; war erfolgreich, wenn beide Geräte &amp;quot;ACK&amp;quot; im Display zeigen. &lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass keines der Geräte vorher mit einer Zentrale (u.B. VCCU) gepairt sein darf. Im Zweifel vorher unpairen.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Heizkörperthermostat gepeert (&amp;quot;verknüpft&amp;quot;) sind, dann wird das HM-TC-IT-WM-W-EU Funk-Wandthermostat mit FHEM wie in [[HomeMatic Devices pairen]] beschrieben gepairt.&lt;br /&gt;
&lt;br /&gt;
Anschliessend kann per FHEM mit dem Befehl&lt;br /&gt;
 set myTC desired-temp 22&lt;br /&gt;
die Zieltemperatur an den Wandthermostat übermittelt werden. Dieser verteilt diese Temperatur und seine gemessene Ist-Temperatur an die Heizkörperthermostate weiter, die dann entsprechend das Ventil öffnen oder schliessen. Die Wunschtemperatur kann auch lokal an &#039;&#039;&#039;allen&#039;&#039;&#039; Geräten (also auch an einem der Heizkörperthermostate) per Drehregler geändert werden und wird anschliessend an alle anderen Geräte und FHEM weiterübertragen. Kommunikationspartner für FHEM ist aber immer nur das gepairte HM-TC-IT-WM-W-EU Funk-Wandthermostat.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* schnell eingerichtet - weniger Komplex, keine Channel peering notwendig.&lt;br /&gt;
* weniger Geräte in FHEM, weniger Daten, weniger Defs, weniger Prozessorlast, geringer Verbrauch des Funkkontingents an FHEMs Funkschnittstelle etc. (Es ist allerdings fraglich, ob in normalen Installationen diese Effekte überhaupt spürbar sind)&lt;br /&gt;
* Heizung kann am HM-TC-IT-WM-W-EU Funk-Wandthermostat auch bei Ausfall von FHEM eingestellt werden.&lt;br /&gt;
* eventuelles Wochenprogramm muss nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten)&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* keine direkte Kontrolle über die Heizkörperthermostate, weniger Daten. Z.B. ist der Valevöffnungsgrad FHEM unbekannt, ebenso Batteriewarnungen, auch lassen sich diverse Dinge nicht konfigurieren wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* leichte Verzögerung in der Übermittlung der Zieltemperatur, da diese zuerst an den Wandthermostaten übermittelt wird und dieser erst mit etwas Verzögerung die Daten an die Heizkörperthermostaten weiterreicht.&lt;br /&gt;
* eventuelles Wochenprogramm kann nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten), man kann also nicht einzelnen Heizkörpern abweichende Programme geben. Da man einen Wandthermostat wohl in der Praxis nur mit Heizkörperthermostaten &#039;&#039;&#039;eines&#039;&#039;&#039; einzelnen Raumes peeren wird, ist dieser Nachteil ggf eher theoretischern Natur.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung aller Komponenten durch FHEM ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird zumindest von den meisten Nutzern des Forums favorisiert, weil sie mehr Kontrolle auch über Details und Geräte ermöglicht.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle Geräte - also die Heizkörperthermostate und der Wandthermostat - wie in [[HomeMatic Devices pairen]] beschrieben mit FHEM (also i.d.R. der VCCU) gepairt.&lt;br /&gt;
&lt;br /&gt;
Danach kann das [[Peering (HomeMatic)|Peering]] mit den Heizkörperthermostaten des betreffenden Raumes stattfinden. Je nach Funktion sind dazu einer oder mehrer Channels zu peeren, Details weiter unten.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* direkte Kontrolle über die Heizkörperthermostate, Verfügbarkeit Daten wie z.B  Valevöffnungsgrad FHEM, Batteriestatus, am jedem Heizkörper gemessene Temperatur etc.; diverse Paramter am Heizkörperthermostat konfigurierbar, wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* schneller Übermittlung der Zieltemperatur (und sonstiger Daten), da diese zugleich an alle gepeerten Thermostaten übermittelt wird.&lt;br /&gt;
* Wochenprogramm frei in alle Geräte übertragbar, dadurch in grossen Räumen gezieltes Ansteuern einzelner Heizkörper möglich etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* deutlich komplexer in der Einrichtung&lt;br /&gt;
* mehr Geräte in FHEM, mehr Daten, mehr Defs notwendig, höhere Prozessorlast, höhere Auslastung des Funkkontingents an der HM Funkschnittstelle von FHEM (zumindest für &#039;&#039;normale&#039;&#039; Anzahl von Thermostaten eher theoretischer Natur)&lt;br /&gt;
* Zieltemperatur kann ohne FHEM nicht mehr am HM-TC-IT-WM-W-EU Funk-Wandthermostat eingestellt werden, sondern müsste an jedem Heizkörper einzeln eingestellt werden.&lt;br /&gt;
* Wochenprogramm muss ggf auf mehrere Geräte verteilt werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Steuerung aller Komponenten über FHEM müssen je nach Anwendungsfall bestimmte Channels gepeert werden.&lt;br /&gt;
&lt;br /&gt;
==== Channels (Kanäle) ====&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 01 _Weather =====&lt;br /&gt;
Damit das [[HM-CC-RT-DN Funk-Heizkörperthermostat]] die Temperatur des Wandthermostats übernimmt, muss der Weather Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
Hinweis: Nach jeden dieser peer Aufgaben, sollte am Thermostat sowie am Wandthermostat die Status-Meldung CMDs_pending abgewartet werden, bis wieder CMDs_done ausgegeben wird. Andernfalls bekommt man ggf. unerwartete Probleme oder es wird ggf. beim Thermostat oder beim Wandthermostat das peer nicht sauber durchgeführt.&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 02 _Climate =====&lt;br /&gt;
Damit der Heizkörperthermostat vom Wandthermostat auch eingestellt werden kann (Soll-Temperatur, Mode etc.), muss der Climate Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Climate single set&lt;br /&gt;
Dies muss für jedes zu steuernde Heizkörperthermostat wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 03 _WindowRec =====&lt;br /&gt;
Mit diesem Kanal lassen sich Fensterkontakte (HM-SEC-SC oder HM-SEC-RHS) peeren, die ihren Fensterstatus (geöffnet/gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
&lt;br /&gt;
Damit der Tür-Fensterkontakt den Thermostat aufwecken kann, muss zuerst der Burst-Modus aktiviert werden, siehe dazu [[HM-SEC-SC_Tür-Fensterkontakt#Problembehebung]].&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Peering mit einem Tür-Fensterkontakt läuft wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Sec-SC&amp;gt; peerChan 0 &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;tc_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;tc_WindowRec&amp;gt; regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 06 _remote =====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;tc-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;rt-remote&amp;gt; single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 07 _SwitchTr =====&lt;br /&gt;
Dieser Kanal kann direkt mit einem HomeMatic-Schaltaktor verknüpft (gepeert) werden, um temperaturgesteuerte Schaltvorgänge auszulösen. Eine direkte Nutzung als Feuchtigkeitssensor zur Lüftungssteuerung ist hingegen nicht möglich. Geeignete Aktoren sind alle dauerhaft mit Klein- oder Netzspannung versorgten Aktoren, die zum Betrieb keinen sog. Burst benötigen (Hutschienen-, Unterputz- und Wandmontage). Nicht geeignet sind demnach die batterieversorgten ein- oder vierkanaligen HM-LC-Sw(x)-BA-PCB-Aktoren oder das Empfangsmodul HM-MOD-Re-8, weil der Thermostat den zum &amp;quot;Aufwecken&amp;quot; dieser Geräte nötigen Burst nicht senden kann. &lt;br /&gt;
&lt;br /&gt;
Das Peering mit einem Schaltaktor läuft z.B. wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt; peerChan 0 &amp;lt;HM-LC-SW1-FM&amp;gt; single set&lt;br /&gt;
&lt;br /&gt;
Dies allein ist nicht ausreichend, da der so gepeerte Aktor sich bei jedem Heizbefehl abwechselnd ein- und ausschaltet, da er die Ausschaltbefehle des Thermostaten (short trigger mit Wert 0) ignoriert. Um das zu korrigieren, wird er so programmiert, dass er, wenn eingeschaltet, auf den Ausschaltbefehl reagiert (und ihn ansonsten ignoriert):&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOn ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man mit dem Aktor ein inverses Verhalten erreichen (etwa beim Einsatz als Kühlthermostat oder für stromlos offene Ventilsteuerköpfe von Fußbodenheizungen), so setzt man &#039;&#039;&#039;stattdessen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOff ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Einstellungen werden in **Registern** des HM-TC-IT-WM-W-EU vorgenommen. Das heißt, dass diese Einstellungen im Gerät selbst gespeichert werden, nicht in der Konfigurations-Datei von FHEM.&lt;br /&gt;
&lt;br /&gt;
=== Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Register im Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; erlauben es zu konfigurieren, welche Daten der HM-TC-IT-WM-W-EU in seinem LC-Display anzeigt.&lt;br /&gt;
&lt;br /&gt;
==== showInfo time|date ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Uhrzeit&#039;&#039; (&amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;, Standard-Einstellung) oder das &#039;&#039;Datum&#039;&#039; (&amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;) angezeigt wird. Der folgende Befehl erlaubt es das Datum anzeigen zu lassen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showInfo date&lt;br /&gt;
&lt;br /&gt;
==== showSetTemp actTemp|setTemp ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Ist-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;actTemp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder die &#039;&#039;Soll-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;setTemp&amp;lt;/code&amp;gt;) im Display angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showSetTemp setTemp&lt;br /&gt;
&lt;br /&gt;
==== showHumidity temp|tempHum ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob dauerhaft die &#039;&#039;Temperatur&#039;&#039; (&amp;lt;code&amp;gt;temp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder &#039;&#039;Temperatur und Luftfeuchtigkeit&#039;&#039; im Wechsel (&amp;lt;code&amp;gt;tempHum&amp;lt;/code&amp;gt;) im Display angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showHumidity tempHum&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-TC-IT-WM-W-EU verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am Thermostat durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
abgesetzt werden. Rückgängig wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
&lt;br /&gt;
Die Temperaturlisten des HM-TC-IT-WM-W-EU werden identisch zu anderern HomeMatic Thermostaten verwaltet, siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]. Beim HM-TC-IT-WM-W-EU ist der Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
=== Luftfeuchtigkeit in SVG Plot ===&lt;br /&gt;
&lt;br /&gt;
Um die Luftfeuchtigkeit im Plot darzustellen benötigt man im Logfile folgenden Eintrag:&lt;br /&gt;
&lt;br /&gt;
 2017-10-24_22:03:12 WANDTHERMOSTAT_Weather humidity: 61&lt;br /&gt;
&lt;br /&gt;
Um diesen zu erhalten muss man in der Logfile Konfiguration evtl. das DEF um die Weather Information erweitern:&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT&lt;br /&gt;
&lt;br /&gt;
Erweiterung:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT|WANDTHERMOSTAT_Weather:.*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einer Weile, sollte der Eintrag &amp;quot;WANDTHERMOSTAT_Weather humidity:&amp;quot; im SVG Plot zur Auswahl zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
== FHEM-Log ==&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich einmal die Wunschtemperatur erhöht, damit auch was passiert:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_pending&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm_Climate set_desired-temp 18.0&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_done&lt;br /&gt;
&lt;br /&gt;
Bei mir ist es so, das der SwitchTr Kanal nur mit dem gepeerten Device spricht, hier ein HM-LC-SW1-FM:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trig_KH_Bad_Therm_SwitchTr: 200&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trigLast: KH_Bad_Therm_SwitchTr :200&lt;br /&gt;
&lt;br /&gt;
Der hat auch prompt reagiert und die Heizung eingeschaltet:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung level: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung pct: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung deviceMsg: on (to KH_Bad_Therm)&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung on&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung timedOn: off&lt;br /&gt;
&lt;br /&gt;
und noch ein wenig Geplauder der vorhandenen Kanäle:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate humidity: 50&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm battery: ok&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm batteryLevel: 3&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate mode: auto&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather temperature: 16.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather humidity: 50&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather T: 16.0 H: 50&lt;br /&gt;
&lt;br /&gt;
== Virtuelle Peers: Simulation von Fensterkontakten u.A. ==&lt;br /&gt;
=== Simulation von Fensterkontakten ===&lt;br /&gt;
Das beim [[HM-CC-RT-DN Funk-Heizkörperthermostat#Simulation von Fensterkontakten und externen Temperatursensoren|HM-CC-RT-DN]] beschriebene Verfahren zum Peering mit einem virtuellen Tür- oder Fensterkontakt kann auch beim &#039;&#039;HM-TC-IT-WM-W-EU&#039;&#039; entsprechend umgesetzt werden.&lt;br /&gt;
Anders als der &#039;&#039;HM-CC-RT-DN&#039;&#039; kann der &#039;&#039;HM-TC-IT-WM-W-EU&#039;&#039; dabei Schaltsignale von mehreren Kanälen eines virtuellen Devices unterscheiden, so dass die Anlage je eines eigenen (Stamm-) Devices nicht zwingend erforderlich ist, wenn man nur den Fensterkanal des &#039;&#039;HM-TC-IT-WM-W-EU&#039;&#039; zur Steuerung einer Gruppe aus WT und RT nutzen will.&lt;br /&gt;
=== Schalten von Aktoren anderer Hersteller mit dem Trigger-Kanal===&lt;br /&gt;
Peert man den &#039;&#039;SwitchTr&#039;&#039;-Kanal mit einem Kanal eines virtuellen Devices, kann man die dort eingehenden Events auswerten, um Aktoren beliebiger anderer Systeme zu steuern. &lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Updates für den HM-TC-IT-WM-W-EU können von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic_Firmware_Update]]. Das Thermostat wird in den Updatemodus gebracht, indem beide äußeren Tasten gedrückt werden, während die Batterien eingesetzt werden. Das Display zeigt &amp;quot;FUP&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Bei der Firmware 1.2 und dem Kanal Climate funktioniert die Einstellung der Hysterese über das Register hyst2point nicht. Der Eintrag wird ignoriert. &lt;br /&gt;
&lt;br /&gt;
Siehe auch Bericht im [https://de.elv.com/forum/hm-tc-it-wm-w-eu-hystereseeinstellung-hat-keine-funktion-10076 Forum von ELV]&lt;br /&gt;
&lt;br /&gt;
* Der Sensor sollte nur innerhalb seiner Spezifikationen (0° - 50°C) betrieben werden; bei kleineren Temperaturen werden überhöhte Temperaturen gesendet, siehe {{Link2Forum|Topic=80383|LinkText=dieser Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.eq-3.de/downloads/download/homematic/bda/hm-tc-it-wm-w-eu_um_ge_eq-3_web.pdf Manual]&lt;br /&gt;
* [https://www.eq-3.de/downloads/download/homematic/pdb/funk-wandthermostat_132030a0_produktdatenblatt_v14.pdf Produktdatenblatt] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=23024</id>
		<title>DbLog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=23024"/>
		<updated>2017-10-22T19:02:15Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Bekannte Probleme */ gelöscht, da obsolete&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 oder Auswertungen mit [https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten DbRep] anzufertigen&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;
CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP);&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;
== Beispiel: Anlegen und Nutzung einer Mysql-Datenbank ==&lt;br /&gt;
Anstatt nano kann jeder andere kompatible Editor verwendet werden. Weiterhin bitte beachten, dass die hier genannten Befehle teilweise root-Rechte voraussetzen. Entweder komplett als root arbeiten, oder mittels sudo.&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;
 cd /opt/fhem/contrib/dblog/&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;
== 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:reduceLogState.* { (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>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-RGBW-WM_Funk-RGBW-Controller&amp;diff=18244</id>
		<title>HM-LC-RGBW-WM Funk-RGBW-Controller</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-RGBW-WM_Funk-RGBW-Controller&amp;diff=18244"/>
		<updated>2017-01-02T17:29:13Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Befehle im Dim Kanal */ &amp;lt;duration&amp;gt; &amp;lt;ramp&amp;gt; für pct&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Todo|Dieses Device ist seit Anfang Oktober 2015 als Bausatz auf dem Markt - dieser Artikel ist noch im Aufbau - bitte Verständnis für Unvollständigkeiten und fehlende Bereiche}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LC-RGBW-WM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-RGBW-Controller &lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Dimmer&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868&amp;amp;nbsp;MHz&lt;br /&gt;
|HWChannels=3&lt;br /&gt;
|HWVoltage=12-24 V DC&lt;br /&gt;
|HWPowerConsumption=15 mA max. (LED&#039;s aus)&lt;br /&gt;
|HWPoweredBy=externe Stromversorgung&lt;br /&gt;
|HWSize=89x99x26mm&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 Funk-RGBW-Controller erlaubt das Dimmen von 12/24 Volt Gleichstrom LED-Stripes mit gemeinsamer Anode (+). Es können max. 34W pro Kanal angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Im Oktober 2015 hat die Auslieferung der Geräte als (einfacher) Bausatz begonnen. Zusätzlich ist das Gerät als &amp;quot;fertig aufgebauter Bausatz&amp;quot; mit einem Aufpreis (derzeit 30 Euro) erhältlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Gewicht: 90 g&lt;br /&gt;
&lt;br /&gt;
== Anwendungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
Der Controller ist für die Montage an Ebenen Flächen gedacht. Es ist eine eigene vorhandene 12/24V Stromversorgung notwendig (nicht im Lieferumfang enthalten). Der Controller besitzt Schraubklemmen zum direkten Anschluss von LED-Stripes. Es ist dabei auf die max. zulässige Leistung pro Kanal zu achten. Diese kann je nach Stripe variieren.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
 &lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
* Die Farbe weiß zusammen mit rot, grün oder blau zu mischen ist offenbar nicht möglich. &lt;br /&gt;
* Unklar ist, wie neue Programme erstellt und gespeichert werden können.&lt;br /&gt;
* Bei langsamen Farb- und Helligkeitsänderungen sind deutliche Farb- und Helligkeitssprünge wahrnehmbar, da die Änderung nicht kontinuierlich abläuft, sondern sprunghaft.&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
Der Controller hat drei Kanäle, die jeweils verschiedene Befehle ermöglichen:&lt;br /&gt;
&lt;br /&gt;
=== Befehle im Dim Kanal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schaltet die LEDs mit der zuletzt eingestellten Farbe dauerhaft ein. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; on-for-timer &amp;lt;ontime&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schaltet die LEDs mit der zuletzt eingestellten Farbe ein und nach &amp;lt;ontime&amp;gt; Sekunden wieder aus. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; on-till &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schaltet die LEDs mit der zuletzt eingestellten Farbe ein und um &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; Uhr wieder aus. &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; hat das Format hh:mm:ss&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; off&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Schaltet die LEDs dauerhaft aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; press&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Wenn die LEDs eingeschaltet sind, werden sie sanft ausgeschaltet. Sind sie ausgeschaltet, werden sie mit der zuletzt eingestellten Farbe sanft eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die LEDs eingeschaltet sind, werden sie sofort ausgeschaltet. Sind sie ausgeschaltet, werden sie mit der zuletzt eingestellten Farbe sofort eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; pct &amp;lt;bright&amp;gt; &amp;lt;duration&amp;gt; &amp;lt;ramp&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die LEDs werden auf den angegebenen Helligkeitswert &amp;lt;bright&amp;gt; für die Dauer &amp;lt;duration&amp;gt; mit den entsprechenden Rampen-Zeiten &amp;lt;ramp&amp;gt; gesetzt. &amp;lt;bright&amp;gt; ist ein Wert von 0 bis 100 (Prozent). &lt;br /&gt;
&lt;br /&gt;
Dauer und  Rampen-Zeit sind optional und werden jeweils in Sekunden angegeben. Wenn sie nicht angegeben werden, wird für die Dauer 0 = unendlich und für die Rampen-Zeit 2 angenommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die LEDs werden um 10% hoch gedimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; down&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die LEDs werden um 10% herunter gedimmt.&lt;br /&gt;
&lt;br /&gt;
=== Befehle im Color Kanal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; brightCol &amp;lt;bright&amp;gt; &amp;lt;colVal&amp;gt; &amp;lt;duration&amp;gt; &amp;lt;ramp&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Ramp-Phase, in der die LEDs von 0% hochgedimmt werden und anschließend eine Duration-Phase, in der sie mit konstanter Helligkeit angeschaltet bleiben. Nach der Duration-Phase dimmen die LEDs innnerhalb von 1 Sekunde auf 0% herunter. Die LED-Farbe ist in allen Phasen gleich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;bright&amp;gt;&#039;&#039;&#039; regelt die Helligkeit in der Duration-Phase und geht von 0 (=0%) bis 100 (=100%)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;colVal&amp;gt;&#039;&#039;&#039; regelt die Farbe in der Ramp- und Duration-Phase und geht von 0 bis 100:&amp;lt;br&amp;gt;&lt;br /&gt;
0 = reines Rot, 33 = Grün, 66.5 = Blau, 99.5 = Rot mit minimalem Blauanteil, 100 = Weiß&amp;lt;br&amp;gt;&lt;br /&gt;
Werte dazwischen ergeben Mischfarben, z.B. 8 = Gelb, 75 = Lila. Weiß zusammen mit R, G oder B zu mischen ist offenbar nicht möglich. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;duration&amp;gt;&#039;&#039;&#039; definiert, wie viele Sekunden die LEDs nach der Ramp-Phase eingeschaltet bleiben. Während der Duration-Phase blinkt die Helligkeittaste regelmäßig 1x lang. Ein Wert von 0 lässt die LEDs dauerhaft eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;ramp&amp;gt;&#039;&#039;&#039; definiert, in wie vielen Sekunden die LEDs von 0% auf &amp;lt;bright&amp;gt; % hochgedimmt werden. Während der Ramp-Phase blinkt die Helligkeittaste regelmäßig 2x kurz und 1x lang. Bei &amp;lt;ramp&amp;gt; = 0 gehen die LEDs sofort an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; color &amp;lt;colVal&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stellt die Farbe &#039;&#039;&#039;&amp;lt;colVal&amp;gt;&#039;&#039;&#039; (siehe oben) in der aktuellen Helligkeit ein.&lt;br /&gt;
&lt;br /&gt;
=== Befehle im Auto Kanal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; brightAuto &amp;lt;bright&amp;gt; &amp;lt;colProg&amp;gt; &amp;lt;min&amp;gt; &amp;lt;max&amp;gt; &amp;lt;duration&amp;gt; &amp;lt;ramp&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog zum brightCol-Befehl im Color-Kanal gibt es eine Ramp-Phase, in der die LEDs von 0% hochgedimmt werden und anschließend eine Duration-Phase, in der sie mit konstanter Grund-Helligkeit angeschaltet bleiben. Nach der Duration-Phase dimmen die LEDs innnerhalb von 1 Sekunde auf 0% herunter. In beiden Phasen wird ein vordefiniertes Programm abgespielt und während dessen blinkt die Automatiktaste regelmäßig 1x lang.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;bright&amp;gt;&#039;&#039;&#039; steuert die Grund-Helligkeit analog zum brightCol-Befehl im Color-Kanal. Je nach Programm schwankt die Helligkeit während der Programmausführung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;colProg&amp;gt;&#039;&#039;&#039; definiert welches Programm abgespielt wird. Im Auslieferungszustand sind folgende Programm-Nummern vorhanden:&lt;br /&gt;
&lt;br /&gt;
1: Farbverlauf langsam (Geschwindigkeit Farbwechsel: 2 * &amp;lt;colChangeSpeed&amp;gt; Sekunden pro Durchgang, default: 20 Sekunden). &lt;br /&gt;
Der Farbverlauf geht von colVal &amp;lt;min&amp;gt; bis colVal &amp;lt;max&amp;gt;. colVal ist analog zum brightCol-Befehl im Color-Kanal. Nach der &amp;lt;max&amp;gt; Farbe geht es sofort bei der &amp;lt;min&amp;gt; Farbe weiter. Das kann zu Farbsprüngen führen. Die Geschwindigkeit des Farbwechsels kann mit dem Register colChangeSpeed geändert werden (default: colChangeSpeed = 10 Sekunden pro Durchgang). In Programm 1 dauert ein Durchgang von Farbe 0 (&amp;lt;min&amp;gt; = 0) bis Farbe 200 (&amp;lt;max&amp;gt; = 200) genau 2 * &amp;lt;colChangeSpeed&amp;gt; Sekunden (default also 20 Sekunden). Wenn weniger Farben durchlaufen werden, ist der Durchlauf entsprechend schneller.&amp;lt;br&amp;gt;&lt;br /&gt;
Beinhaltet der Farbbereich den Wert 200, so wird auch weiß angesteuert. Beim Einschalten der Automatikmodi über eine gepeerte Fernbedienung (oder bei der Bedienung über virtuelle Buttons) ist dies nicht der Fall, Weiß wird dann ausgespart.&lt;br /&gt;
&lt;br /&gt;
2: Farbverlauf normal (Geschwindigkeit Farbwechsel: &amp;lt;colChangeSpeed&amp;gt; Sekunden pro Durchgang). Wie Programm 1, jedoch mit normaler Geschwindigkeit (default: 10 Sekunden pro Durchgang).&lt;br /&gt;
&lt;br /&gt;
3: Farbverlauf schnell (Geschwindigkeit Farbwechsel: 0.5 * &amp;lt;colChangeSpeed&amp;gt; Sekunden pro Durchgang). Wie Programm 1, jedoch mit doppelter Geschwindigkeit (default: 5 Sekunden pro Durchgang).&lt;br /&gt;
&lt;br /&gt;
4: Kaminfeuer (rotes Licht, das ein Feuer simuliert). &amp;lt;min&amp;gt; und &amp;lt;max&amp;gt; haben keine Bedeutung.&lt;br /&gt;
&lt;br /&gt;
5: Wasserfall (blaues Licht, das die Helligkeit verändert). &amp;lt;min&amp;gt; und &amp;lt;max&amp;gt; haben keine Bedeutung.&lt;br /&gt;
&lt;br /&gt;
6: TV-Simulation (Farb- und Helligkeitsschwankungen simulieren ein eingeschaltetes TV-Gerät, dient zur Abwehr von Einbrechern). &amp;lt;min&amp;gt; und &amp;lt;max&amp;gt; haben keine Bedeutung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;min&amp;gt;&#039;&#039;&#039; siehe Programme 1 bis 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;max&amp;gt;&#039;&#039;&#039; siehe Programme 1 bis 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;duration&amp;gt;&#039;&#039;&#039; definiert, wie viele Sekunden die LEDs nach der Ramp-Phase eingeschaltet bleiben. Während der Duration-Phase blinkt die Helligkeittaste regelmäßig 1x lang. &amp;lt;br&amp;gt;&lt;br /&gt;
Eine Ansteuerung mit &amp;lt;duration&amp;gt; 0 als Dauerbetrieb ist im Automatikmodus offenbar nicht möglich. (?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;ramp&amp;gt;&#039;&#039;&#039; definiert, in wie vielen Sekunden die LEDs von 0% auf &amp;lt;bright&amp;gt; % hochgedimmt werden. Während der Ramp-Phase blinkt die Helligkeittaste regelmäßig 2x kurz und 1x lang. Bei &amp;lt;ramp&amp;gt; = 0 gehen die LEDs sofort an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; colProgram &amp;lt;colProg&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird das Programm mit der Nummer &#039;&#039;&#039;&amp;lt;colProg&amp;gt;&#039;&#039;&#039; (siehe oben) in der aktuell gesetzten Helligkeit abgespielt. &lt;br /&gt;
&lt;br /&gt;
=== Peering ===&lt;br /&gt;
Die folgenden Befehle peeren alle Tasten eines HomeMatic 6-fach Tasters (HM-PB-6-WM55) mit den 3 Kanälen des RGBW-Controllers mit dem Namen &#039;&#039;&#039;rgbw&#039;&#039;&#039;. Die Bedienung ist dann wie auf S. 12+13 der Bedienungsanleitung beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_01 peerChan 0 rgbw_Dim dual set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_03 peerChan 0 rgbw_Color dual set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_05 peerChan 0 rgbw_Auto dual set&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Taste 1: Kurzes Drücken schaltet das Licht aus, langes Drücken dimmt herunter&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 2: Kurzes Drücken schaltet das Licht ein, langes Drücken dimmt herauf&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 3: Kurzes Drücken springt um einen Schritt im Farbkreis nach unten, langes Drücken fährt im Farbkreis nach unten&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 4: Kurzes Drücken springt um einen Schritt im Farbkreis nach oben, langes Drücken fährt im Farbkreis nach oben&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 5: Kurzes Drücken schaltet den Automatikmodus aus, langes schaltet den nächstniedrigeren ein&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 6: Kurzes Drücken schaltet den Automatikmodus 1 ein, langes den nächsthöheren&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Automatikmodi springen beim Durchschalten vom höchsten (TV) zum niedrigsten (Farbwechsel langsam) und umgekehrt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Durchfahren des Farbkreises hält immer bei Weiß an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die folgenden Befehle peeren die ersten 3 Tasten (=Kanäle) eines HomeMatic 6-fach Tasters (HM-PB-6-WM55) mit den 3 Kanälen des RGBW-Controllers.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Bedienung ist dadurch etwas anders.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_01 peerChan 0 rgbw_Dim single set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_02 peerChan 0 rgbw_Color single set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set taster1_Btn_03 peerChan 0 rgbw_Auto single set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 1: Kurzes Drücken schaltet das Licht ein und aus, langes Drücken dimmt hoch bzw. herunter&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 2: Kurzes Drücken springt um einen Schritt im Farbkreis nach oben bzw unten, langes Drücken fährt im Farbkreis nach oben bzw unten&amp;lt;br&amp;gt;&lt;br /&gt;
Taste 3: Kurzes Drücken schaltet den nächsthöheren Automatikmodus ein, langes den niedrigeren. &amp;lt;br&amp;gt;&lt;br /&gt;
Um die Automatik auszuschalten und den aktuellen Farbton einzufrieren, kurz auf Taste 2 (Farbe) drücken.&lt;br /&gt;
Auch hier springen die Automatikmodi weiter. Beim Durchfahren des Farbkreises nach unten oben wird aber (warum auch immer) über weiß hinweg nach rot gesprungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein HomeMatic 2-Kanal Funk-Sender (HM-RC-2-PBU-FM) kann wie folgt mit dem Dim-Kanal gepeert werden. Mit kurzem Druck nach oben/unten werden die LEDs ein-/ausgeschaltet und mit langem Druck hoch- und runtergedimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set taster2_Btn_01 peerChan 0 rgbw_Dim dual set&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Readings im Dim Kanal ===&lt;br /&gt;
&lt;br /&gt;
Die Readings level, pct und state liefern den aktuellen Dim-Level (0 = aus, 100 = maximale Helligkeit) zurück.&lt;br /&gt;
&lt;br /&gt;
=== Readings im Color Kanal ===&lt;br /&gt;
&lt;br /&gt;
Die Readings color, level, pct und state liefern den aktuellen Farbwert zurück (0 = rot, 100 = weiß).&lt;br /&gt;
&lt;br /&gt;
=== Readings im Auto Kanal ===&lt;br /&gt;
&lt;br /&gt;
Die Readings colProgram, level, pct und state liefern das zuletzt gewählte Programm (0 = aus, 1 = Farbautomatik langsam, ..., 6 = TV-Simulation) zurück.&lt;br /&gt;
&lt;br /&gt;
=== Colorpicker in FHEM erzeugen ===&lt;br /&gt;
&lt;br /&gt;
1. Ein Dummy mit dem Namen RGB_Picker erzeugen, mit dem die Farbe ausgewählt wird. Außerdem wird ein Reading mit dem Namen rgb erzeugt, welches den Hex-Code der gewählten Farbe enthält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define RGB_Picker dummy&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker devStateIcon {my $icon=Color_devStateIcon(ReadingsVal($name,&amp;quot;rgb&amp;quot;,&amp;quot;000000&amp;quot;));;$icon=~s/on/light_light_dim_100/;;$icon}&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker readingList hue&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker setList hue:colorpicker,HUE,0,0.5,100&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker stateFormat hue&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker userReadings rgb {my $hue=ReadingsVal($name,&amp;quot;hue&amp;quot;,&amp;quot;0&amp;quot;);;($hue eq &amp;quot;100&amp;quot;)?&amp;quot;FFFFFF&amp;quot;:Color::hsv2hex(($hue/100),1,1)}&lt;br /&gt;
&lt;br /&gt;
attr RGB_Picker webCmd hue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Ein Notify definieren, welches bei jeder Änderung des Dummys (Schritt 1) den Color Befehl an den RGBW-Controller sendet. Statt rgbw_Color den Namen des Color Kanals des RGBW-Controllers eintragen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define RGB_Picker_notify notify RGB_Picker:hue.* { fhem &amp;quot;set rgbw_Color color &amp;quot; . ReadingsVal($NAME,&#039;hue&#039;,100) }&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
3. Jetzt noch die FHEM-Weboberfläche für die Dim und Auto Kanäle definieren (dabei rgbw_Dim und rgbw_Auto mit den Device Namen der entsprechenden Kanäle ersetzen):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
attr rgbw_Dim webCmd pct:on:off&lt;br /&gt;
&lt;br /&gt;
attr rgbw_Auto webCmd colProgram&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Events Auszug === &lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
== Logging/Graph. Darstellung ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Bedienungsanleitung: [http://files.elv.de/Assets/Produkte/14/1419/141952/Downloads/141952_rgbw_controller_um.pdf]&lt;br /&gt;
* Produktseite ELV: [http://www.elv.de/homematic-funk-rgbw-controller-bausatz.html] &lt;br /&gt;
* Diskussion im FHEM Forum: [http://forum.fhem.de/index.php/topic,39719.0.html]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Dimmer]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=16144</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=16144"/>
		<updated>2016-08-11T17:55:50Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Verlinkung für Schreibweise &amp;quot;smartVISU&amp;quot; korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in [[SmartVISU]] mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
* Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator unter einem beliebigen Pfad ablegen, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
* Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service  &lt;br /&gt;
* Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
* Definition der Kalender findet in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
: - wie bisher nur die Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe und Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - eine lokale Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;    &lt;br /&gt;
: Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,     wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
:Bei allen abgelegten Dateien muss auf die Rechte geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden, wie auch bei den Dateien im pages Ordner.&lt;br /&gt;
* Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
: &amp;lt;code&amp;gt;{% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle und Download benötigter Dateien: {{Link2Forum|Topic=35831}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=System%C3%BCbersicht&amp;diff=16143</id>
		<title>Systemübersicht</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=System%C3%BCbersicht&amp;diff=16143"/>
		<updated>2016-08-11T17:54:46Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Verlinkung für Schreibweise &amp;quot;smartVISU&amp;quot; korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Fhem &#039;&#039;&#039;System&#039;&#039;&#039; besteht im Prinzip aus den in der nachfolgenden &#039;&#039;&#039;Übersicht&#039;&#039;&#039; aufgeführten Bestandteilen.&lt;br /&gt;
[[Datei:Systemübersicht.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
Bei der Komponente &#039;&#039;&#039;Server&#039;&#039;&#039; muss unterschieden werden zwischen dem eigentlichen &#039;&#039;&#039;Fhem&#039;&#039;&#039; Hausautomations-Server (implementiert in der Perl-Datei fhem.pl) und der Hardware, auf der dieser Server ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Als Server &#039;&#039;&#039;Hardware&#039;&#039;&#039; sind (z.&amp;amp;nbsp;B.) möglich:&lt;br /&gt;
* Windows Rechner&lt;br /&gt;
* Linux Rechner&lt;br /&gt;
* OS X Rechner&lt;br /&gt;
* Router (z.&amp;amp;nbsp;B. [[AVM Fritz!Box|FritzBox]])&lt;br /&gt;
* Einplatinencomputer, wie [[:Kategorie:Raspberry Pi|Raspberry Pi]], [[BeagleBone Black]]&lt;br /&gt;
* DockStar, PogoPlug, etc.&lt;br /&gt;
* diverse NAS Systeme wie Buffalo Linkstation, Synology Diskstation&lt;br /&gt;
(Diese Aufstellung ist nur eine unvollständige Auswahl; Details zu unterstützten Server Systemen finden sich in der Kategorie [[:Kategorie:Server Hardware|Server Hardware]]).&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Das Hausautomations-System wird definiert über die [[Konfiguration]], die im Regelfall besteht aus der &lt;br /&gt;
* reinen Textdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; (Standard nach der Erstinstallation) oder alternativ einer&lt;br /&gt;
* [[configdb|SQL-Datenbank]]&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration enthält Definitionen für die Bestandteile (Geräte) und Funktionen des jeweiligen Hausautomations-Systems. Die verfügbaren Befehle und deren Syntax sind in der Befehlsreferenz ([http://fhem.de/commandref.html commandref]) aufgeführt und beschrieben. Zu einigen Hilfsmodulen gibt es [[:Kategorie:Hilfsmodul|detaillierte Beschreibungen]] mit Beispielen.&lt;br /&gt;
&lt;br /&gt;
== Benutzeroberfläche ==&lt;br /&gt;
Der Zugriff auf FHEM erfolgt mittels Webbrowser oder App über die verfügbaren &#039;&#039;&#039;[[:Kategorie:FHEM Frontends|Fhem Benutzeroberflächen]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In den Fhem Server integriert ist ein Webserver ([[PGM2]]), der im Prinzip immer zur Verfügung steht. Abhängig vom benutzten Klienten ist PGM2 über &lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8083/fhem&amp;lt;/code&amp;gt; (Desktop-Darstellung = Port 8083),&lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8084/fhem&amp;lt;/code&amp;gt; (Smartphone-Darstellung = Port 8084) oder &lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8085/fhem&amp;lt;/code&amp;gt; (Tablet-Darstellung = Port 8085) &lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
Eine Auswahl der Benutzeroberflächen:&lt;br /&gt;
* PGM2 - das Standardinterface&lt;br /&gt;
* [[FLOORPLAN]]&lt;br /&gt;
* [[FHEM Tablet UI]]&lt;br /&gt;
* [[SmartVISU]]&lt;br /&gt;
* diverse Apps für iOS und Android (Auswahl unter: [[:Kategorie:FHEM Frontends|Fhem Benutzeroberflächen]])&lt;br /&gt;
&lt;br /&gt;
Beispielhafte Screenshots diverser Benutzeroberflächen: http://fhem.de/fhem.html#Screenshots&lt;br /&gt;
&lt;br /&gt;
== Module ==&lt;br /&gt;
Die Funktionalität von Fhem kann über &#039;&#039;&#039;Module&#039;&#039;&#039; erweitert werden. Module können die unterschiedlichsten Aufgaben übernehmen vom Anbinden eines Hardwaresystems&lt;br /&gt;
über die Bereitstellung eines Frontends bis zur Automatisierung von Aufgaben. Beispiele für Module:&lt;br /&gt;
* 00_CUL.pm - Implementierung der Unterstützung für den [[CUL]]&lt;br /&gt;
* 11_FHT.pm - Unterstützung der [[:Kategorie:FHT Components|FHT]] Heizungssteuerung&lt;br /&gt;
* 95_FLOORPLAN.pm - Grundriss (oder Ähnliches) als Benutzeroberfläche &lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Module können unterteilt werden in&lt;br /&gt;
* [[:Kategorie:FhemBefehl|Befehlsmodule]] (FhemBefehle sind teilweise eigenständige Module) &lt;br /&gt;
* [[:Kategorie:Hilfsmodul|Hilfsmodule]]&lt;br /&gt;
* [[:Kategorie:Gerätemodul|Gerätemodule]]&lt;br /&gt;
Die offiziell in Fhem enthaltenen Module sind in der [http://fhem.de/commandref Commandref] beschrieben. Sie werden über den [[Update]]-Befehl von Fhem verteilt und aktualisiert. Voraussetzung für die Aufnahme als offizielles Modul sind Supportwille durch den Entwickler und Dokumentation des Moduls.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich existiert eine Vielzahl von [[:Kategorie:Modul (Inoffiziell)|inoffiziellen Modulen]], die manuell in Fhem installiert werden müssen. Auch die Aktualisierung erfolgt nicht über den Update-Befehl, sondern muss durch den Nutzer selbst erfolgen. Inoffizielle Module sind an den verschiedensten Stellen zu finden:&lt;br /&gt;
* [[:Kategorie:Modul (Contrib)|Contrib]]-Verzeichnis im offiziellen Fhem-Sourcecode-SVN [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/]&lt;br /&gt;
* Beiträge im Fhem-Forum&lt;br /&gt;
* private Homepages&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
Die Verbindung zu den angeschlossenen &#039;&#039;&#039;Geräten&#039;&#039;&#039; der Hausautomation wird im Allgemeinen - geräteabhängig - über [[Interface|Interfaces]] (manchmal auch als &#039;&#039;&#039;Gateway&#039;&#039;&#039; bezeichnet) hergestellt. Das kann z.&amp;amp;nbsp;B. im Falle von [[HomeMatic]] ein [[HMLAN Konfigurator]] sein, ein mittels LAN mit dem Fhem Server verbundenes Gerät, das die Fhem Steuerbefehle  in das HomeMatic Funkprotokoll umsetzt - und auch die Funktelegramme der HomeMatic Komponenten an Fhem zurückgibt. Entsprechende Interfaces gibt es auch für andere Funkprotokolle und für die drahtgebundenen Systeme.&lt;br /&gt;
&lt;br /&gt;
Eine (unvollständige) Liste solcher Interfaces (siehe auch [[:Kategorie:Interfaces|Kategorie Interfaces]]):&lt;br /&gt;
* [[CUL]] - je nach Einstellung für die Kommunikation mit [[:Kategorie:FS20 Components|FS20]], [[:Kategorie:FHT Components|FHT]] und andere [[SlowRF]] Protokolle, [[MAX|MAX!]] Heizungssteuerung oder [[:Kategorie:HomeMatic Components|HomeMatic]] und, mit Einschränkungen, InterTechno (nur senden)&lt;br /&gt;
* [[CUNO]], ähnlich CUL, jedoch nicht per USB sondern per IP angebunden (z.Zt. -Stand Januar 2014 - nicht für HomeMatic empfohlen)&lt;br /&gt;
* [[HMLAN Konfigurator|HomeMatic LAN Konfigurations-Adapter]] - HomeMatic&lt;br /&gt;
* [[MAX#MAXLAN|MAX! Cube LAN-Gateway]]&lt;br /&gt;
* Schnittstellen(karten) für [[:Kategorie:1-Wire|1-Wire]]&lt;br /&gt;
* TCM(120/310) zur Anbindung von [[:Kategorie:EnOcean Components|EnOcean]]&lt;br /&gt;
* [[Arduino]] mit Firmata über USB oder Netzwerk&lt;br /&gt;
* [[panStamp]] als Möglichkeit Arduinos mit diversen Sensor- und I/O- Boards per 868MHz Funk über das SWAP protokoll anzubinden&lt;br /&gt;
* [[JeeLink]], ein weiteres USB-Stick Interface (ebenfalls arduino basiert) für diverse 433MHz und 868MHz Komponenten&lt;br /&gt;
* [[RFXtrx]] für InterTechno, RSL, ELRO etc., Wetter-Sensoren (Oregon-Scientific, Cresta, La Crosse, TFA, UPM) und andere 433&amp;amp;nbsp;Mhz Geräte.&lt;br /&gt;
* manche Komponenten ([[:Kategorie:IP Components|IP Komponenten]]) können über TCP/IP (LAN) direkt vom Fhem Server aus angesprochen werden; hier ist dann kein weiteres Interface im eigentlichen Sinne erforderlich. Dies gilt auch für diverse Module die Geräte über WEB Dienste des Herstellers anbinden (z.&amp;amp;nbsp;B. Withings, [[netatmo]]).&lt;br /&gt;
&lt;br /&gt;
== Protokolle ==&lt;br /&gt;
Der Kommunikation zwischen Interfaces und Geräten liegt jeweils ein bestimmtes Protokoll zugrunde. Unterstützte Protokolle mit ihren Eigenschaften sind in der folgenden Tabelle aufgelistet.&lt;br /&gt;
&amp;lt;!-- Bitte Informationen in die nachfolgende Tabelle eintragen.&lt;br /&gt;
* SlowRF (1&amp;amp;nbsp;kHz Datenrate)&lt;br /&gt;
** FS20&lt;br /&gt;
** FHT&lt;br /&gt;
** S300&lt;br /&gt;
** HMS&lt;br /&gt;
** EM&lt;br /&gt;
* HomeMatic (20&amp;amp;nbsp;kHz Datenrate)&lt;br /&gt;
* MAX! (20&amp;amp;nbsp;kHz Datenrate)&lt;br /&gt;
* EnOcean&lt;br /&gt;
* FRM* (Arduino Firmata)&lt;br /&gt;
* IT (InterTechno, 433&amp;amp;nbsp;MHz)&lt;br /&gt;
* SWAP&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Übersicht über unterstützte Funkprotokolle&lt;br /&gt;
|-&lt;br /&gt;
! Name !! rfMode !! Frequenz !! Modulation !! Datenrate !! class=&amp;quot;unsortable&amp;quot; | Interfaces !! class=&amp;quot;unsortable&amp;quot; | Modul !! class=&amp;quot;unsortable&amp;quot; | Geräte (Beispiel) !! class=&amp;quot;unsortable&amp;quot; | Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [[FS20_Allgemein|FS20]] || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || [http://fhem.de/commandref.html#FS20 FS20] || - || -&lt;br /&gt;
|-&lt;br /&gt;
| FHT  || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || [http://fhem.de/commandref.html#CUL_FHTTK FHTTK], [http://fhem.de/commandref.html#FHT FHT] || Heizungsregelung || -&lt;br /&gt;
|-&lt;br /&gt;
| S300 || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || [http://fhem.de/commandref.html#CUL_WS CUL_WS] || Temperatur-/Feuchtesensoren || -&lt;br /&gt;
|-&lt;br /&gt;
| HMS || SlowRF || 868,35MHz || AM || 1kHz || CU*O, FHZ || - || ?? || -&lt;br /&gt;
|-&lt;br /&gt;
| EM || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || [http://fhem.de/commandref.html#CUL_EM CUL_EM] || Energiemonitore (Strom, Gas) || -&lt;br /&gt;
|-&lt;br /&gt;
| [[HomeMatic ]]|| HomeMatic || 868,3MHz || FM || 10kHz || CU*, [[HM-CFG-LAN_LAN_Konfigurations-Adapter|HMLan]], [[HM-CFG-USB_USB_Konfigurations-Adapter|HMUsb]] || [http://fhem.de/commandref.html#CUL_HM CUL_HM]  || [[:Kategorie:HomeMatic_Components|diverse]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[MAX|MAX!]] || MAX || 868,3MHz || FM || 20kHz || CU*, [[MAX#MAXLAN|MAXLAN]] ||  [http://fhem.de/commandref_DE.html#MAX MAX] ||  [[:Kategorie:MAX|Wandthermostat, Heizkörperthermostate, Fensterkontakt, Zwischenstecker]] ||  -&lt;br /&gt;
|-&lt;br /&gt;
| IT || - || 433MHz || AM? || 1kHz || CU*433, || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| FRM || - || ?? || ?? || ?? || ?? || - || ?? || -&lt;br /&gt;
|-&lt;br /&gt;
| SWAP || - || 868 (433/915) MHz || GFSK || 38.3835 Kbps || panStamp (+panStick) || [http://fhem.de/commandref.html#SWAP SWAP] || RGB LED Driver, diverse Sensoren und Aktoren || -&lt;br /&gt;
|-&lt;br /&gt;
| [[:Kategorie:EnOcean  Components|EnOcean]] || - || 315 / 868 / 902 / 928MHz || ASK || 125 kbit/s || [http://fhem.de/commandref.html#TCM TCM] || [http://fhem.de/commandref.html#EnOcean EnOcean] || Batterielose Funksensoren, diverse Aktoren || -&lt;br /&gt;
|-&lt;br /&gt;
| PCA || - || 868,35MHz || ?? || ?? || [[JeeLink]] || [http://fhem.de/commandref.html#PCA301 PCA301] || [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[La Crosse]] || - || 868,35MHz || ?? || ?? || [[JeeLink]], LGW || [http://fhem.de/commandref.html#LaCrosse LaCrosse] || LaCrosse IT+ (Technoline) Sensoren || -&lt;br /&gt;
|-&lt;br /&gt;
| ZigBee Light Link || - || 2,4 GHz ||  ||  || HUE Bridge (RaspBee) || [http://fhem.de/commandref.html#HUEBridge HUEBridge] || Philips HUE und LightLink Lampen (auch Osram LIGHTIFY an der HUE-Bridge)|| [http://www.developers.meethue.com/documentation/how-hue-works]&lt;br /&gt;
|-&lt;br /&gt;
| [[MySensors]] || - || 2,4 GHz ||  ||  || MySensors Gateway  || [[MYSENSORS]] || [http://www.mysensors.org/build/ Selbstbau-Sensoren] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[:Kategorie:Z-Wave Components|Z-Wave]] || - || 868MHz || 2-FSK || 9.600 bit/s oder 40 Kbit/s || [http://fhem.de/commandref.html#ZWDongle ZWDongle] || [http://fhem.de/commandref.html#ZWave ZWave] || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[WMBUS]] || WMBus_T, WMBus_S || 868MHz || ?? || 100 kbit/s / 32.768 kbit/s || CU* || [http://fhem.de/commandref.html#WMBUS WMBUS] || Wasseruhren, Wärmezähler, Elektrozähler || - &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | &#039;&#039;Tabelle muss noch vervollständigt werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Legende:&#039;&#039;&#039; &lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; | CU* = CUL, CUN, CUNO / &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Übersicht über drahtgebundene Systeme&lt;br /&gt;
|-&lt;br /&gt;
! Name !!  class=&amp;quot;unsortable&amp;quot; | Interfaces (Hardware) !! class=&amp;quot;unsortable&amp;quot; | Modul !! class=&amp;quot;unsortable&amp;quot; | Geräte (Beispiel) !! class=&amp;quot;unsortable&amp;quot; | Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [[1-Wire]]  || [[Interfaces für 1-Wire|diverse]] || [http://fhem.de/commandref.html#OWX OWX] || [[:Kategorie:1-Wire|1-Wire]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[EIB_/_KNX|EIB/KNX]]  || [http://fhem.de/commandref.html#TUL TUL] || [http://fhem.de/commandref.html#EIB EIB] || [[:Kategorie:EIB/KNX|EIB/KNX]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[HomeMatic Wired]]  || [[HomeMatic Wired RS485 LAN Gateway|HM485 LAN Gateway]] || [http://fhem.de/commandref.html#HM485_LAN HM485_LAN] || [[:Kategorie:HomeMatic Components|Präfix HMW]] || -&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Tabelle muss noch vervollständigt werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Legende:&#039;&#039;&#039; &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Komponenten ==&lt;br /&gt;
Der eigentliche Zweck eines Hausautomatisierungs-Projekts sind dann letztendlich die &#039;&#039;&#039;Geräte&#039;&#039;&#039; (Komponenten / Aktoren / [[:Kategorie:Schalter (Empfänger)|Empfänger]]), die automatisch gesteuert werden sollen, bzw. auch Auslöser für Aktionen ([[:Kategorie:Schalter (Sender)|Sender]]) und Lieferant von Datenmaterial ([[:Kategorie:Hardware Typen|Sensoren]]) sind.&lt;br /&gt;
&lt;br /&gt;
Diese Geräte sind, sofern es eine detaillierte Beschreibung dazu gibt, in den jeweiligen Unterseiten der [[:Kategorie:Hardware|Hardwareliste]] aufgeführt.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.enocean.com/de/home/ EnOcean] Homepage&lt;br /&gt;
* [http://www.elv.de ELV], (Haupt-)Lieferant von FS20, FHT, HomeMatic, MAX!&lt;br /&gt;
* [http://www.panstamp.com panStamp], panStamp Hersteller&lt;br /&gt;
* [http://jeelabs.com/products/jeelink Jeelabs], JeeLink Hersteller&lt;br /&gt;
* [http://www.zigbee.org/ Zigbee] Homepage&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=16142</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=16142"/>
		<updated>2016-08-11T17:50:36Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* zusätzliche Widgets */  Repository for Plot-Widget hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt das Web-Frontend smartVISU, dessen Funktionen und Konfiguration.  [http://www.smartvisu.de smartVISU] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient. Für die Anbindung an FHEM ist die Installation und Konfiguration von [[Fronthem]] notwendig, dass das Interface für die Anbindung zur Verfügung stellt. &lt;br /&gt;
&lt;br /&gt;
In einem separaten Artikel wird die [[smartVISU Installation|Basis-Installation von smartVISU]] beschrieben, die eine Voraussetzung für die Verwendung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
Ein paar Sceenshots, die einen Eindruck des Frontends vermitteln wurden im {{Link2Forum|Topic= 27291|Message=227568|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Hat man die Installation durchgeführt, befindet sich im root-Verzeichnis der smartVISU Installation für die schnelle Einrichtung die Datei readme.md, in der ein 10-Schritte Guide die erste Konfiguration beschreibt. &lt;br /&gt;
&lt;br /&gt;
Wurden ebenfalls die Erweiterungen für FHEM eingespielt, befindet sich in diesem Verzeichnis ebenfalls die Datei readme.txt, die etwas FHEM-spezifischer ebenfalls den 10-Schritte Guide enthält.&lt;br /&gt;
&lt;br /&gt;
== Bausteine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemuebersicht_fronthem_smartVISU.jpg|550px|thumb|right|Systemübersicht, fronthem/smartVISU]] &lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Statische Seiten ===&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von smartVISU ist ein Web-Server mit PHP notwendig. Dieser stellt die statischen Inhalte des Frontends zur Verfügung. Die Oberfläche muss den eigenen Bedürfnissen per programmieren der Web-Seite anpassen werden. HTML-, PHP- oder  Javascript-Kenntnisse sind hilfreich, aber nicht zwingend erforderlich.&lt;br /&gt;
Genügend Beispiele sind vorhanden und leicht anpassbar, so dass durch einfaches Zusammenstellen schnell eine individuelle Seite erstellt werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
&lt;br /&gt;
Was fronthem für FHEM ist, ist der Treiber für smartVISU. Er ist ein Stück Software (js), das in die ausgeliefertern Webseiten per Link eingebettet ist, auf dem Endgerät ausgeführt wird und die Kommunikation zwischen Endgerät und Websocketserver (fronthem) übernimmt und anpasst {{Link2Forum|Topic=53881|Message=466167|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Ein explizit auf FHEM angepasster Treiber stellt unter anderem die Mandantenfähigkeit (end-device werden seperat betrachtet und beschickt) sicher.&lt;br /&gt;
&lt;br /&gt;
Der Treiber besteht aus den beiden Files [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.js io_fhem.js] und [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.min.js io_fhem.min.js], die im smartVISU/driver/ Verzeichnis der smartVISU Installation abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite auf einem Endgerät auf, wird auf der Config-Seite (Zahnrädersymbol in der oberen Menüzeile)&lt;br /&gt;
* als Driver &amp;quot;Fhem&amp;quot; ausgewählt, &lt;br /&gt;
* die Adresse des Websocketservers, auf dem fronthem ansprechbar ist unter &amp;quot;Address URL/IP&amp;quot; eingetragen und &lt;br /&gt;
* für den Port &amp;quot;2121&amp;quot; gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
smartVISU bietet mit seinem Konzept der Widgets eine flexible Möglichkeit der individuellen Erweiterung an. Für viele Anwendungen gibt es bereits Widgets (z.B. Heizung, RGB, Clock, Wetter, etc.), auf die zurückgegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Mit einem Widget wird für den jeweiligen Anwendungsfall bestimmt, wie auf der Darstellungsseite das Design aussehen soll und auf der Verarbeitungsseite welche Parameter übergeben werden. So könnte man die Widgets auch als Vorlage verstehen, um diese Designelemente bei Bedarf entsprechend einzubinden.&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Schaut man sich die Dokumentation oder die Beispielhäuser an, sollte vorher den Treiber auf offline geschaltet werden, weil sich sonst fronthem die Konfiguration der Demohäuser importiert und merkt {{Link2Forum|Topic=30909|Message=235155|LinkText=(Forum)}}.}}&lt;br /&gt;
Es gibt diverse Standard-Widget, die bereits Teil der smartVISU-Installation sind. Darüber hinaus können eigene oder individualisierte Widgets hinzugefügt werden. &lt;br /&gt;
Die Dokumentation der verfügbaren Standard-Widgets in der Basisinstallation ist im Unterordner /pages/Docu gespeichert. Die Dokumentation kann angeschaut werden, indem man auf der Config-Seite die Page &amp;quot;Docu&amp;quot; auswählt bzw. direkt in die Widgets schaut, die im Stammverzeichnis der smartVISU im Unterordner /widgets abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
== Standard Seitenladeprozess ==&lt;br /&gt;
&lt;br /&gt;
(Übersetzt aus readme.txt)&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite über den Aufruf &amp;lt;code&amp;gt;http://&amp;lt;Server-IP&amp;gt;/&amp;lt;Installationsverzeichnis&amp;gt;&amp;lt;/code&amp;gt; (z.B. http://192.168.1.1/smartvisu) auf, läuft über die &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; ein vordefinierter Ladezyklus ab, der&lt;br /&gt;
* über die includes.php, die Einstellungen der config.ini einliest,&lt;br /&gt;
* die twig Umgebung startet&lt;br /&gt;
* die Pfade setzt (für pages, icons, Standartwidgets, etc.)&lt;br /&gt;
* die index.html der in der config.ini configurierten Seite ./pages/&amp;lt;eigener Ordner&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Ladeprozess ist in der Datei readme.txt noch etwas detaillierter beschrieben. Der Ladeprozess regelt ebenfalls das Verhalten, wenn noch keine Konfiguration definiert wurde oder bestimmte Dateien an den Orten nicht vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Gibt es vor allen Dingen bei der Ersteinrichtung Probleme, sollte man sich den Ladeprozess und das Vorhandensein der Dateien und die richtige Konfiguration näher anschauen.&lt;br /&gt;
&lt;br /&gt;
== Ersteinrichtung ==&lt;br /&gt;
&lt;br /&gt;
Die folgende Beschreibung setzt voraus, dass die notwendigen Schritte für die grundsätzliche Installation von smartVISU und fronthem bereits erfolgreich durchgeführt wurden.&lt;br /&gt;
&lt;br /&gt;
=== ein &amp;quot;eigenes-Haus&amp;quot; anlegen ===&lt;br /&gt;
&lt;br /&gt;
Es gilt ein eigenes &amp;quot;Haus&amp;quot; anzulegen, dass man individuell konfiguriert.&lt;br /&gt;
&lt;br /&gt;
*  Für eine eigene neue Seite legt man unter ./pages des smartVISU-Root-Verzeichnisses ein neues Verzeichnis &amp;lt;code&amp;gt;eigenes-Haus&amp;lt;/code&amp;gt; an.&lt;br /&gt;
*  Die Dateien auf dem Ordner ./pages/_template kopiert man in dieses Verzeichnis.&lt;br /&gt;
*  Dort editiert man die Dateien und fügt z.B. Dinge ein, die man aus der Doku z.B. auf von www.smartVISU.de heraus kopiert hat. Auch die Beispielhäuser sind sehr hilfreich zum lernen. Einen speziellen Editor oder eine grafische Oberfläche für die Programmierung ist nicht erforderlich. Als erstes passt man z.B. die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; an die eigenen Bedürfnisse an.&lt;br /&gt;
* Die Räume richtet man ein, indem man diese durch Kopien des Beispielraumes (&amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt;) und passende icons und Überschriften erstellt. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* Innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eigener Seiten oder Widgets sollte man darauf achten, nicht in die Dateien der smartVISU-Installation direkt einzugreifen, sondern vornehmlich in den eigenen Pages zu arbeiten. So steht auch einem unbeeinträchtigten späteren Update nichts im Wege.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise anstelle &amp;lt;code&amp;gt;root.html&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;base.html&amp;lt;/code&amp;gt; im Ordner ./pages/base direkt zu verändern, sollte man jeweils angepasste Kopien in das eigene Pages-Verzeichnis legen - diese haben dann Vorrang vor den System Dateien {{Link2Forum|Topic=30909|Message=268592|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Die Template-Engine schaut zuerst im Ordner ./pages/&amp;lt;eigeneSeite&amp;gt; nach und anschließend im Ordner ./pages/base. Dadurch sind Anpassungen an (root, base) etc. für spezielle Geräte möglich {{Link2Forum|Topic=30909|Message=241148|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Für die eigenen Seiteninhalte sollten entsprechend die Dateinamen &amp;quot;base.html, basic.html, device.html&amp;quot; nicht verwendet werden, da dieses System-Seiten sind.&lt;br /&gt;
&lt;br /&gt;
;fronthem&lt;br /&gt;
Obwohl der folgende Teil bereits zur Einrichtung von fronthem gehört, sei es der Vollständigkeit halber des Beispiels hier trotzdem erwähnt:&lt;br /&gt;
* In FHEM eine fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun sollten die GADs aufgelistet werden. Aus der Liste ein GAD auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung Endgerät ===&lt;br /&gt;
Auf dem Endgerät greift man auf die smartVISU-Seiten zu und stellt auf der Config-Seite den Treiber, IP der Servers und den Port ein.&lt;br /&gt;
&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config&amp;lt;/code&amp;gt; bzw. Zahnrad = Config-Menü:&lt;br /&gt;
* Im Feld &amp;quot;Interfaces&amp;quot; für pages das eigenes Haus auswählen (=Ordnername)&lt;br /&gt;
* Der Pagecache sollte zumindest während der Einrichtung ausgeschaltet sein.&lt;br /&gt;
* Im Feld I/O Connection den Treiber Fhem wählen&lt;br /&gt;
* Die IP-Adresse des Servers mit dem Websocket-Server eintragen&lt;br /&gt;
* Port 2121 einstellen&lt;br /&gt;
Nach allen Eintragungen die Konfiguration am unteren Ende der Seite speichern.&lt;br /&gt;
&lt;br /&gt;
Damit die GADs nun im GAD-Editor auf der Detailseite von einem [[fronthem#fronthemEditor|fronthemDevice]] auftauchen, ist es jetzt wichtig, die neue Seite in smartVISU einmal aufzurufen, damit im Hintergrund die GADs übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt, man hat vorher alle notwendigen Schritte für die Installation und Konfiguration von fronthem ausgeführt, kann man nun smartVISU in Verbindung mit FHEM benutzen.&lt;br /&gt;
&lt;br /&gt;
Im Noramlbetrieb stellt man den Pagecache auf &amp;quot;on&amp;quot;- dann werden die templates compiliert gespeichert, was die Geschwindigkeit erhöht {{Link2Forum|Topic=35960|Message=283665|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Die wichtigste Dateien der eigenen Seite ===&lt;br /&gt;
Im Folgenden sind die wichtigsten Dateien und Grundlagen beschrieben, aus der eine Seite zusammensetzt ist, die aus den Template-Dateinen erstellt wurde. Jede Seite besteht aus der Menüzeile, einer Seitenleiste auf der linken Seite und den Hauptbereich auf der rechten Seite.&lt;br /&gt;
&lt;br /&gt;
Entsprechend Browser (z.B. Desktop oder Smartphone) werden die Seiten unterschiedlich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;index.html&lt;br /&gt;
Der Inhalt dieser Seite ist der erste, der aufgerufen wird. Hauptsächlich besteht er aus 2 Blöcken, gekennzeichnet durch&lt;br /&gt;
 {% block sidebar %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
 {% block content %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;sidebar&amp;lt;/code&amp;gt; steht der Inhalt, der auf der linken Seite der Startseite dargestellt wird. Im Beispiel wird wird die Uhr, das Datum, das aktuelle Wetter und die Wettervorhersage eingebunden.&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; wird die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; eingebunden. Der Inhalt dieses Blocks wird im rechten Bereich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;rooms_menu.html&lt;br /&gt;
Diese Datei enthält die Darstellung des Links für die einzelnen Räume wie z.B. &amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt; für das Schlafzimmer. Ruft man von der Hauptseite einen Raum auf, wird auf einem Desktop-Browser die Seite &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt;im linken Bereich im Block Sidebar dargestellt, im rechten Bereich wird der Inhalt des Raums dargestellt.&lt;br /&gt;
&lt;br /&gt;
;room_sleeping.html&lt;br /&gt;
Pro Raum gibt es eine Datei, die die Darstellung eines Raumes festlegen. Dort wie oben, wird der Bereich, der Darstellung über die Blockdefinition festgelegt.&lt;br /&gt;
&lt;br /&gt;
;rooms.html&lt;br /&gt;
Im Rahmen des Ladezyklus, wird diese Datei ebenfalls geladen, läd jedoch ihrerseits gleich die nächste. &lt;br /&gt;
&lt;br /&gt;
;visu.ccs&lt;br /&gt;
Möchte man das Design anpassen, verwendet man eine Stylesheet-Datei &amp;quot;visu.css&amp;quot; in seinem Projektordner. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;visu.js&lt;br /&gt;
In dieser Datei kann Javascrict-Code abgelegt werden, der auf einer Seite aufgerufen wird. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;menu.html&lt;br /&gt;
Diese Datei ist nicht Teil der Einrichtung über die Vorlage des template-Ordners. Möchte man das Menü anpassen, das oben auf der Seite angezeigt wird, kopiert man die Datei &amp;lt;code&amp;gt;menu.html&amp;lt;/code&amp;gt; aus dem Verzeichnis ./base in sein Verzeichnis ./pages/&amp;lt;eigeneSeite&amp;gt; und passt diese entsprechend an. Über die Reihenfolge, in der die Ordner nach möglichen Dateien durchsucht werden, wird im Folgenden die eigene individualisierte Datei berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Widgets ===&lt;br /&gt;
&lt;br /&gt;
==== Einbindung ====&lt;br /&gt;
&lt;br /&gt;
Eigene oder individualisierte Widgets müssen vor dem Aufruf auf einer Seite &amp;quot;bekannt&amp;quot; gemacht werden. Dafür gibt es unterschiedliche Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
;Import der html-Datei&lt;br /&gt;
&lt;br /&gt;
Einfache Widgets bestehen meist nur aus einer html-Datei. Diese muss vor der ersten Verwendung des Widgets &amp;quot;importiert&amp;quot; werden.&lt;br /&gt;
&lt;br /&gt;
An zentraler Stelle lässt sich dieses wie folgt durchführen. Man&lt;br /&gt;
* legt in seinem Ordner ./pages/eigenes-Haus einen Unterordner ./pages/eigenes-Haus/widgets an.&lt;br /&gt;
* kopiert die widgets-Datei in diesen Ordner.&lt;br /&gt;
* passt die Rechte entsprechend an.&lt;br /&gt;
* fügt der Datei &amp;lt;code&amp;gt;rooms.hmtl&amp;lt;/code&amp;gt; in einer neuen Zeile direkt unterhalb von &amp;lt;code&amp;gt;{% extends &amp;quot;base.html&amp;quot; %}&amp;lt;/code&amp;gt; folgende Zeile ein&lt;br /&gt;
 {% import  &amp;quot;widgets\\temp_sensor.html&amp;quot; as TempSensor %}&lt;br /&gt;
&lt;br /&gt;
Der Dateiname &amp;lt;code&amp;gt;temp_sensor.html&amp;lt;/code&amp;gt; enthält in diesem Beispiel den Code des Widgets {{Link2Forum|Topic=30909|Message=238044|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=238136|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=251586|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Import der Style-Definition und JS&lt;br /&gt;
&lt;br /&gt;
Für komplexere Widgets muss ebenfalls die Style-Datei &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; erweitert werden und Javascript-Code der Datei &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; hinzugefügt werden. Damit der Code nicht komplett in den Dateien verwaltet werden muss, kann über die [https://github.com/ddtlabs/smartvisu-widgets/wiki/HowTo-Install-Widgets hier] beschriebene Methode der Code in Einzeldateien belassen werden. Dieses erleichtert den Überblick und die Möglichkeit separat Weiterentwicklungen der einzelnen Widgets auseinanderzuhalten und zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Über die beschriebene Erweiterung der &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; müssen die entsprechenden Teiles eines Widget nur noch einmal in diesen beiden Dateien definiert werden.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es die Möglichkeit, die Dateien in einem Unterordner ./pages/eigenes-Haus/widgets abzulegen {{Link2Forum|Topic=30909|Message=276232|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist in diesem {{Link2Forum|Topic=30909|Message=278922|LinkText=Forums-Beitrag}} beschrieben, die allerdings nicht updatesicher für eine mögliche Aktualisierung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
==== Aufruf ====&lt;br /&gt;
&lt;br /&gt;
Auf der Seite wird der Aufruf des Widgets eingebettet und über seinen Aufruf ebenfalls positioniert. Beispiele für das Einbetten sind im Docu-Haus enthalten. &lt;br /&gt;
 {{ widgetname.function(&#039;&amp;lt;id&amp;gt;&#039;, &#039;&amp;lt;gad&amp;gt;&#039;, &#039;&amp;lt;weitere Parameter&amp;gt;&#039;) }}&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Widgets auf einer Seite besteht jeweils aus einem in doppelt geschweifte Klammern eingefassten Ausdrucks. &lt;br /&gt;
Der Ausdruck besteht aus der Nennung des Widgets, gefolgt von der mit einem Punkt getrennten Funktion. Wie in FHEM üblich ist auch hier die Groß/Kleinschreibung zu berücksichtigen und eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
Im Anschluss in Klammern folgen die durch Komma getrennten Parameter in Hochkommata:&lt;br /&gt;
* id, die ID des Widgets ist eigentlich nur innerhalb von smartVISU wichtig, kann willkürlich gewählt werden, darf sich auf einer html-Seite allerdings nicht wiederholen.&lt;br /&gt;
* gad, wird auch als Item bezeichnet. Dieses ist der Ausdruck, der später an fronthem übergeben wird und entsprechend im GAD-Editor auftaucht für die weitere Verarbeitung und Zuordnung.&lt;br /&gt;
* weitere Parameter, teilweise optional und teilweise mit Default-Werten, wenn diese nicht angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Ein etwas detaillierteres Beispiel findet sich innerhalb der [http://leseprobe.smartvisu.de/index.php?page=grundlagen_widget Leseprobe] der Dokumentation auf der smartVISU-Homepage.&lt;br /&gt;
&lt;br /&gt;
== Codebeispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
Umrechnung der Batterieanzeige für Verwendung mit rtr&lt;br /&gt;
https://forum.fhem.de/index.php?topic=30909.msg242236#msg242236&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/IconHighlights in Menus|IconHighlights in Menus]]&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[Reload Button]]&lt;br /&gt;
* [[nur aktiven switch darstellen und schalten]] mit Erweiterung von basic.html&lt;br /&gt;
* Layout für rtr in der ccs https://forum.fhem.de/index.php?topic=30909.msg255571#msg255571&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard-Widgets ===&lt;br /&gt;
&lt;br /&gt;
{{Todo|Hier sollte nicht die Dokumentation der Standardwidgets wiedergegeben werden, sondern Spezifika, die nicht in der Dokumentation auftauchen oder Anwendungsbeispiele.}}&lt;br /&gt;
&lt;br /&gt;
==== Basic.switch ====&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/lichtSzene|lichtSzene]]&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[smartVISU/Leselampe|Leselampe]]&lt;br /&gt;
* [[Basic Switch]]&lt;br /&gt;
&lt;br /&gt;
==== Basic.slider ====&lt;br /&gt;
&lt;br /&gt;
* [[Rolladen]]&lt;br /&gt;
&lt;br /&gt;
==== Basic.symbol ====&lt;br /&gt;
&lt;br /&gt;
* [[Batterieanzeige]]&lt;br /&gt;
* [[Statusanzeige]]&lt;br /&gt;
* [[Fensterkontakt]]&lt;br /&gt;
&lt;br /&gt;
==== basic.shifter ====&lt;br /&gt;
&lt;br /&gt;
Batterieanzeige https://forum.fhem.de/index.php/topic,30909.msg264466.html#msg264466&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Device.dimmer ====&lt;br /&gt;
&lt;br /&gt;
* [[HM Dimmer]]&lt;br /&gt;
&lt;br /&gt;
==== icon ====&lt;br /&gt;
&lt;br /&gt;
* [[Wind]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zusätzliche Widgets ===&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse zusätzliche Widgets, für die es allerdings keine zentrale Quelle gibt. Stattdessen können diese aus den unterschiedlichen Repositories der Entwickler oder aus Beiträgen im Forum heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Widgets gibt es detailliertere Beschreibungen hier im Wiki:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/ical|ical]], Kalendereinbindung&lt;br /&gt;
&lt;br /&gt;
;bekannte Repositories&lt;br /&gt;
https://github.com/herrmannj/smartvisu-widgets&lt;br /&gt;
* LED&lt;br /&gt;
* UZSU V2.0&lt;br /&gt;
** [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* auth_switch&lt;br /&gt;
* basic&lt;br /&gt;
* basic_extra&lt;br /&gt;
* chart&lt;br /&gt;
* device_extra&lt;br /&gt;
* fritzbox&lt;br /&gt;
** [[smartVISU/fritz!box_via_TR-064|fritz!box_via_TR-064]], Einbindung Anruferliste, Telefonbuch, etc.&lt;br /&gt;
* homematic&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
** [[HM-TC Wandthermostat und HM-CC Heizkörperthermostat]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* httpcmd&lt;br /&gt;
* icon/battery&lt;br /&gt;
* icons&lt;br /&gt;
*img&lt;br /&gt;
* listbutton&lt;br /&gt;
* phoneservice/lib/phone/service&lt;br /&gt;
* selectmenu&lt;br /&gt;
* sonos&lt;br /&gt;
* squeezebox&lt;br /&gt;
* textinput&lt;br /&gt;
* timcounter&lt;br /&gt;
&lt;br /&gt;
https://github.com/ddtlabs/smartvisu-widgets&lt;br /&gt;
&lt;br /&gt;
Voraussetzung für die meisten hier liegenden Widgets ist V2.8 von smartVISU.&lt;br /&gt;
* basic-devices&lt;br /&gt;
* hm-rtr&lt;br /&gt;
* hue&lt;br /&gt;
* media&lt;br /&gt;
* motionDetection&lt;br /&gt;
* powerDistribution&lt;br /&gt;
* sonos&lt;br /&gt;
* ventilation&lt;br /&gt;
&lt;br /&gt;
https://github.com/ToGe3688/db_plot_widget&lt;br /&gt;
* Ein Widget für Plots (nur in Verbindung mit [[DbLog]])&lt;br /&gt;
&lt;br /&gt;
https://github.com/bgewehr/smartVISU&lt;br /&gt;
* basic2.html (LED)&lt;br /&gt;
* qlock.html&lt;br /&gt;
* widget_calendar.html&lt;br /&gt;
* widget_fritzbox.html&lt;br /&gt;
* widget_fritzbox_list.html&lt;br /&gt;
* widget_list.html&lt;br /&gt;
* widget_popup.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/mworion/uzsu_widget&lt;br /&gt;
* uzsu_widget V5.0&lt;br /&gt;
&lt;br /&gt;
https://github.com/2ndsky/quad&lt;br /&gt;
* quad&lt;br /&gt;
&lt;br /&gt;
im Forum&lt;br /&gt;
* [[smartVISU/Temperatur-/Feuchtigkeitssensor]]&lt;br /&gt;
* RTR für MAX! https://forum.fhem.de/index.php?topic=30909.msg241379#msg241379&lt;br /&gt;
* Ein weiteres Widget für ein RTR (Homematic) https://forum.fhem.de/index.php?topic=30909.msg276719#msg276719&lt;br /&gt;
* noch ein widget für homematic für HM-CC-RT-DN https://forum.fhem.de/index.php?topic=30909.msg248462#msg248462&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.smartvisu.de smartVISU Hauptseite von smartVISU]&lt;br /&gt;
&lt;br /&gt;
[http://twig.sensiolabs.org/documentation PHP-Twig Doku]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/archive/p/smartvisu/wikis Google-Archiv smartVISU]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=16068</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=16068"/>
		<updated>2016-08-07T17:48:33Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Codebeispiele */ Links zu Repositories hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt das Web-Frontend smartVISU, dessen Funktionen und Konfiguration.  [http://www.smartvisu.de smartVISU] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient. Für die Anbindung an FHEM ist die Installation und Konfiguration von [[Fronthem]] notwendig, dass das Interface für die Anbindung zur Verfügung stellt. &lt;br /&gt;
&lt;br /&gt;
In einem separaten Artikel wird die [[smartVISU Installation|Basis-Installation von smartVISU]] beschrieben, die eine Voraussetzung für die Verwendung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
Ein paar Sceenshots, die einen Eindruck des Frontends vermitteln wurden im {{Link2Forum|Topic= 27291|Message=227568|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Hat man die Installation durchgeführt, befindet sich im root-Verzeichnis der smartVISU Installation für die schnelle Einrichtung die Datei readme.md, in der ein 10-Schritte Guide die erste Konfiguration beschreibt. &lt;br /&gt;
&lt;br /&gt;
Wurden ebenfalls die Erweiterungen für FHEM eingespielt, befindet sich in diesem Verzeichnis ebenfalls die Datei readme.txt, die etwas FHEM-spezifischer ebenfalls den 10-Schritte Guide enthält.&lt;br /&gt;
&lt;br /&gt;
== Bausteine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemuebersicht_fronthem_smartVISU.jpg|550px|thumb|right|Systemübersicht, fronthem/smartVISU]] &lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Statische Seiten ===&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von smartVISU ist ein Web-Server mit PHP notwendig. Dieser stellt die statischen Inhalte des Frontends zur Verfügung. Die Oberfläche muss den eigenen Bedürfnissen per programmieren der Web-Seite anpassen werden. HTML-, PHP- oder  Javascript-Kenntnisse sind hilfreich, aber nicht zwingend erforderlich.&lt;br /&gt;
Genügend Beispiele sind vorhanden und leicht anpassbar, so dass durch einfaches Zusammenstellen schnell eine individuelle Seite erstellt werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
&lt;br /&gt;
Was fronthem für FHEM ist, ist der Treiber für smartVISU. Er ist ein Stück Software (js), das in die ausgeliefertern Webseiten per Link eingebettet ist, auf dem Endgerät ausgeführt wird und die Kommunikation zwischen Endgerät und Websocketserver (fronthem) übernimmt und anpasst {{Link2Forum|Topic=53881|Message=466167|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Ein explizit auf FHEM angepasster Treiber stellt unter anderem die Mandantenfähigkeit (end-device werden seperat betrachtet und beschickt) sicher.&lt;br /&gt;
&lt;br /&gt;
Der Treiber besteht aus den beiden Files [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.js io_fhem.js] und [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.min.js io_fhem.min.js], die im smartVISU/driver/ Verzeichnis der smartVISU Installation abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite auf einem Endgerät auf, wird auf der Config-Seite (Zahnrädersymbol in der oberen Menüzeile)&lt;br /&gt;
* als Driver &amp;quot;Fhem&amp;quot; ausgewählt, &lt;br /&gt;
* die Adresse des Websocketservers, auf dem fronthem ansprechbar ist unter &amp;quot;Address URL/IP&amp;quot; eingetragen und &lt;br /&gt;
* für den Port &amp;quot;2121&amp;quot; gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
smartVISU bietet mit seinem Konzept der Widgets eine flexible Möglichkeit der individuellen Erweiterung an. Für viele Anwendungen gibt es bereits Widgets (z.B. Heizung, RGB, Clock, Wetter, etc.), auf die zurückgegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Mit einem Widget wird für den jeweiligen Anwendungsfall bestimmt, wie auf der Darstellungsseite das Design aussehen soll und auf der Verarbeitungsseite welche Parameter übergeben werden. So könnte man die Widgets auch als Vorlage verstehen, um diese Designelemente bei Bedarf entsprechend einzubinden.&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Schaut man sich die Dokumentation oder die Beispielhäuser an, sollte vorher den Treiber auf offline geschaltet werden, weil sich sonst fronthem die Konfiguration der Demohäuser importiert und merkt {{Link2Forum|Topic=30909|Message=235155|LinkText=(Forum)}}.}}&lt;br /&gt;
Es gibt diverse Standard-Widget, die bereits Teil der smartVISU-Installation sind. Darüber hinaus können eigene oder individualisierte Widgets hinzugefügt werden. &lt;br /&gt;
Die Dokumentation der verfügbaren Standard-Widgets in der Basisinstallation ist im Unterordner /pages/Docu gespeichert. Die Dokumentation kann angeschaut werden, indem man auf der Config-Seite die Page &amp;quot;Docu&amp;quot; auswählt bzw. direkt in die Widgets schaut, die im Stammverzeichnis der smartVISU im Unterordner /widgets abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
== Standard Seitenladeprozess ==&lt;br /&gt;
&lt;br /&gt;
(Übersetzt aus readme.txt)&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite über den Aufruf &amp;lt;code&amp;gt;http://&amp;lt;Server-IP&amp;gt;/&amp;lt;Installationsverzeichnis&amp;gt;&amp;lt;/code&amp;gt; (z.B. http://192.168.1.1/smartvisu) auf, läuft über die &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; ein vordefinierter Ladezyklus ab, der&lt;br /&gt;
* über die includes.php, die Einstellungen der config.ini einliest,&lt;br /&gt;
* die twig Umgebung startet&lt;br /&gt;
* die Pfade setzt (für pages, icons, Standartwidgets, etc.)&lt;br /&gt;
* die index.html der in der config.ini configurierten Seite ./pages/&amp;lt;eigener Ordner&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Ladeprozess ist in der Datei readme.txt noch etwas detaillierter beschrieben. Der Ladeprozess regelt ebenfalls das Verhalten, wenn noch keine Konfiguration definiert wurde oder bestimmte Dateien an den Orten nicht vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Gibt es vor allen Dingen bei der Ersteinrichtung Probleme, sollte man sich den Ladeprozess und das Vorhandensein der Dateien und die richtige Konfiguration näher anschauen.&lt;br /&gt;
&lt;br /&gt;
== Ersteinrichtung ==&lt;br /&gt;
&lt;br /&gt;
Die folgende Beschreibung setzt voraus, dass die notwendigen Schritte für die grundsätzliche Installation von smartVISU und fronthem bereits erfolgreich durchgeführt wurden.&lt;br /&gt;
&lt;br /&gt;
=== ein &amp;quot;eigenes-Haus&amp;quot; anlegen ===&lt;br /&gt;
&lt;br /&gt;
Es gilt ein eigenes &amp;quot;Haus&amp;quot; anzulegen, dass man individuell konfiguriert.&lt;br /&gt;
&lt;br /&gt;
*  Für eine eigene neue Seite legt man unter ./pages des smartVISU-Root-Verzeichnisses ein neues Verzeichnis &amp;lt;code&amp;gt;eigenes-Haus&amp;lt;/code&amp;gt; an.&lt;br /&gt;
*  Die Dateien auf dem Ordner ./pages/_template kopiert man in dieses Verzeichnis.&lt;br /&gt;
*  Dort editiert man die Dateien und fügt z.B. Dinge ein, die man aus der Doku z.B. auf von www.smartVISU.de heraus kopiert hat. Auch die Beispielhäuser sind sehr hilfreich zum lernen. Einen speziellen Editor oder eine grafische Oberfläche für die Programmierung ist nicht erforderlich. Als erstes passt man z.B. die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; an die eigenen Bedürfnisse an.&lt;br /&gt;
* Die Räume richtet man ein, indem man diese durch Kopien des Beispielraumes (&amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt;) und passende icons und Überschriften erstellt. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* Innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eigener Seiten oder Widgets sollte man darauf achten, nicht in die Dateien der smartVISU-Installation direkt einzugreifen, sondern vornehmlich in den eigenen Pages zu arbeiten. So steht auch einem unbeeinträchtigten späteren Update nichts im Wege.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise anstelle &amp;lt;code&amp;gt;root.html&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;base.html&amp;lt;/code&amp;gt; im Ordner ./pages/base direkt zu verändern, sollte man jeweils angepasste Kopien in das eigene Pages-Verzeichnis legen - diese haben dann Vorrang vor den System Dateien {{Link2Forum|Topic=30909|Message=268592|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Die Template-Engine schaut zuerst im Ordner ./pages/&amp;lt;eigeneSeite&amp;gt; nach und anschließend im Ordner ./pages/base. Dadurch sind Anpassungen an (root, base) etc. für spezielle Geräte möglich {{Link2Forum|Topic=30909|Message=241148|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Für die eigenen Seiteninhalte sollten entsprechend die Dateinamen &amp;quot;base.html, basic.html, device.html&amp;quot; nicht verwendet werden, da dieses System-Seiten sind.&lt;br /&gt;
&lt;br /&gt;
;fronthem&lt;br /&gt;
Obwohl der folgende Teil bereits zur Einrichtung von fronthem gehört, sei es der Vollständigkeit halber des Beispiels hier trotzdem erwähnt:&lt;br /&gt;
* In FHEM eine fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun sollten die GADs aufgelistet werden. Aus der Liste ein GAD auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung Endgerät ===&lt;br /&gt;
Auf dem Endgerät greift man auf die smartVISU-Seiten zu und stellt auf der Config-Seite den Treiber, IP der Servers und den Port ein.&lt;br /&gt;
&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config&amp;lt;/code&amp;gt; bzw. Zahnrad = Config-Menü:&lt;br /&gt;
* Im Feld &amp;quot;Interfaces&amp;quot; für pages das eigenes Haus auswählen (=Ordnername)&lt;br /&gt;
* Der Pagecache sollte zumindest während der Einrichtung ausgeschaltet sein.&lt;br /&gt;
* Im Feld I/O Connection den Treiber Fhem wählen&lt;br /&gt;
* Die IP-Adresse des Servers mit dem Websocket-Server eintragen&lt;br /&gt;
* Port 2121 einstellen&lt;br /&gt;
Nach allen Eintragungen die Konfiguration am unteren Ende der Seite speichern.&lt;br /&gt;
&lt;br /&gt;
Damit die GADs nun im GAD-Editor auf der Detailseite von einem [[fronthem#fronthemEditor|fronthemDevice]] auftauchen, ist es jetzt wichtig, die neue Seite in smartVISU einmal aufzurufen, damit im Hintergrund die GADs übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt, man hat vorher alle notwendigen Schritte für die Installation und Konfiguration von fronthem ausgeführt, kann man nun smartVISU in Verbindung mit FHEM benutzen.&lt;br /&gt;
&lt;br /&gt;
Im Noramlbetrieb stellt man den Pagecache auf &amp;quot;on&amp;quot;- dann werden die templates compiliert gespeichert, was die Geschwindigkeit erhöht {{Link2Forum|Topic=35960|Message=283665|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Die wichtigste Dateien der eigenen Seite ===&lt;br /&gt;
Im Folgenden sind die wichtigsten Dateien und Grundlagen beschrieben, aus der eine Seite zusammensetzt ist, die aus den Template-Dateinen erstellt wurde. Jede Seite besteht aus der Menüzeile, einer Seitenleiste auf der linken Seite und den Hauptbereich auf der rechten Seite.&lt;br /&gt;
&lt;br /&gt;
Entsprechend Browser (z.B. Desktop oder Smartphone) werden die Seiten unterschiedlich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;index.html&lt;br /&gt;
Der Inhalt dieser Seite ist der erste, der aufgerufen wird. Hauptsächlich besteht er aus 2 Blöcken, gekennzeichnet durch&lt;br /&gt;
 {% block sidebar %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
 {% block content %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;sidebar&amp;lt;/code&amp;gt; steht der Inhalt, der auf der linken Seite der Startseite dargestellt wird. Im Beispiel wird wird die Uhr, das Datum, das aktuelle Wetter und die Wettervorhersage eingebunden.&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; wird die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; eingebunden. Der Inhalt dieses Blocks wird im rechten Bereich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;rooms_menu.html&lt;br /&gt;
Diese Datei enthält die Darstellung des Links für die einzelnen Räume wie z.B. &amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt; für das Schlafzimmer. Ruft man von der Hauptseite einen Raum auf, wird auf einem Desktop-Browser die Seite &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt;im linken Bereich im Block Sidebar dargestellt, im rechten Bereich wird der Inhalt des Raums dargestellt.&lt;br /&gt;
&lt;br /&gt;
;room_sleeping.html&lt;br /&gt;
Pro Raum gibt es eine Datei, die die Darstellung eines Raumes festlegen. Dort wie oben, wird der Bereich, der Darstellung über die Blockdefinition festgelegt.&lt;br /&gt;
&lt;br /&gt;
;rooms.html&lt;br /&gt;
Im Rahmen des Ladezyklus, wird diese Datei ebenfalls geladen, läd jedoch ihrerseits gleich die nächste. &lt;br /&gt;
&lt;br /&gt;
;visu.ccs&lt;br /&gt;
Möchte man das Design anpassen, verwendet man eine Stylesheet-Datei &amp;quot;visu.css&amp;quot; in seinem Projektordner. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;visu.js&lt;br /&gt;
In dieser Datei kann Javascrict-Code abgelegt werden, der auf einer Seite aufgerufen wird. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;menu.html&lt;br /&gt;
Diese Datei ist nicht Teil der Einrichtung über die Vorlage des template-Ordners. Möchte man das Menü anpassen, das oben auf der Seite angezeigt wird, kopiert man die Datei &amp;lt;code&amp;gt;menu.html&amp;lt;/code&amp;gt; aus dem Verzeichnis ./base in sein Verzeichnis ./pages/&amp;lt;eigeneSeite&amp;gt; und passt diese entsprechend an. Über die Reihenfolge, in der die Ordner nach möglichen Dateien durchsucht werden, wird im Folgenden die eigene individualisierte Datei berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Widgets ===&lt;br /&gt;
&lt;br /&gt;
==== Einbindung ====&lt;br /&gt;
&lt;br /&gt;
Eigene oder individualisierte Widgets müssen vor dem Aufruf auf einer Seite &amp;quot;bekannt&amp;quot; gemacht werden. Dafür gibt es unterschiedliche Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
;Import der html-Datei&lt;br /&gt;
&lt;br /&gt;
Einfache Widgets bestehen meist nur aus einer html-Datei. Diese muss vor der ersten Verwendung des Widgets &amp;quot;importiert&amp;quot; werden.&lt;br /&gt;
&lt;br /&gt;
An zentraler Stelle lässt sich dieses wie folgt durchführen. Man&lt;br /&gt;
* legt in seinem Ordner ./pages/eigenes-Haus einen Unterordner ./pages/eigenes-Haus/widgets an.&lt;br /&gt;
* kopiert die widgets-Datei in diesen Ordner.&lt;br /&gt;
* passt die Rechte entsprechend an.&lt;br /&gt;
* fügt der Datei &amp;lt;code&amp;gt;rooms.hmtl&amp;lt;/code&amp;gt; in einer neuen Zeile direkt unterhalb von &amp;lt;code&amp;gt;{% extends &amp;quot;base.html&amp;quot; %}&amp;lt;/code&amp;gt; folgende Zeile ein&lt;br /&gt;
 {% import  &amp;quot;widgets\\temp_sensor.html&amp;quot; as TempSensor %}&lt;br /&gt;
&lt;br /&gt;
Der Dateiname &amp;lt;code&amp;gt;temp_sensor.html&amp;lt;/code&amp;gt; enthält in diesem Beispiel den Code des Widgets {{Link2Forum|Topic=30909|Message=238044|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=238136|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=251586|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Import der Style-Definition und JS&lt;br /&gt;
&lt;br /&gt;
Für komplexere Widgets muss ebenfalls die Style-Datei &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; erweitert werden und Javascript-Code der Datei &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; hinzugefügt werden. Damit der Code nicht komplett in den Dateien verwaltet werden muss, kann über die [https://github.com/ddtlabs/smartvisu-widgets/wiki/HowTo-Install-Widgets hier] beschriebene Methode der Code in Einzeldateien belassen werden. Dieses erleichtert den Überblick und die Möglichkeit separat Weiterentwicklungen der einzelnen Widgets auseinanderzuhalten und zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Über die beschriebene Erweiterung der &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; müssen die entsprechenden Teiles eines Widget nur noch einmal in diesen beiden Dateien definiert werden.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es die Möglichkeit, die Dateien in einem Unterordner ./pages/eigenes-Haus/widgets abzulegen {{Link2Forum|Topic=30909|Message=276232|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist in diesem {{Link2Forum|Topic=30909|Message=278922|LinkText=Forums-Beitrag}} beschrieben, die allerdings nicht updatesicher für eine mögliche Aktualisierung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
==== Aufruf ====&lt;br /&gt;
&lt;br /&gt;
Auf der Seite wird der Aufruf des Widgets eingebettet und über seinen Aufruf ebenfalls positioniert. Beispiele für das Einbetten sind im Docu-Haus enthalten. &lt;br /&gt;
 {{ widgetname.function(&#039;&amp;lt;id&amp;gt;&#039;, &#039;&amp;lt;gad&amp;gt;&#039;, &#039;&amp;lt;weitere Parameter&amp;gt;&#039;) }}&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Widgets auf einer Seite besteht jeweils aus einem in doppelt geschweifte Klammern eingefassten Ausdrucks. &lt;br /&gt;
Der Ausdruck besteht aus der Nennung des Widgets, gefolgt von der mit einem Punkt getrennten Funktion. Wie in FHEM üblich ist auch hier die Groß/Kleinschreibung zu berücksichtigen und eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
Im Anschluss in Klammern folgen die durch Komma getrennten Parameter in Hochkommata:&lt;br /&gt;
* id, die ID des Widgets ist eigentlich nur innerhalb von smartVISU wichtig, kann willkürlich gewählt werden, darf sich auf einer html-Seite allerdings nicht wiederholen.&lt;br /&gt;
* gad, wird auch als Item bezeichnet. Dieses ist der Ausdruck, der später an fronthem übergeben wird und entsprechend im GAD-Editor auftaucht für die weitere Verarbeitung und Zuordnung.&lt;br /&gt;
* weitere Parameter, teilweise optional und teilweise mit Default-Werten, wenn diese nicht angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Ein etwas detaillierteres Beispiel findet sich innerhalb der [http://leseprobe.smartvisu.de/index.php?page=grundlagen_widget Leseprobe] der Dokumentation auf der smartVISU-Homepage.&lt;br /&gt;
&lt;br /&gt;
== Codebeispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
Umrechnung der Batterieanzeige für Verwendung mit rtr&lt;br /&gt;
https://forum.fhem.de/index.php?topic=30909.msg242236#msg242236&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/IconHighlights in Menus|IconHighlights in Menus]]&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[Reload Button]]&lt;br /&gt;
* [[nur aktiven switch darstellen und schalten]] mit Erweiterung von basic.html&lt;br /&gt;
* Layout für rtr in der ccs https://forum.fhem.de/index.php?topic=30909.msg255571#msg255571&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard-Widgets ===&lt;br /&gt;
&lt;br /&gt;
{{Todo|Hier sollte nicht die Dokumentation der Standardwidgets wiedergegeben werden, sondern Spezifika, die nicht in der Dokumentation auftauchen oder Anwendungsbeispiele.}}&lt;br /&gt;
&lt;br /&gt;
==== Basic.switch ====&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/lichtSzene|lichtSzene]]&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[smartVISU/Leselampe|Leselampe]]&lt;br /&gt;
* [[Basic Switch]]&lt;br /&gt;
&lt;br /&gt;
==== Basic.slider ====&lt;br /&gt;
&lt;br /&gt;
* [[Rolladen]]&lt;br /&gt;
&lt;br /&gt;
==== Basic.symbol ====&lt;br /&gt;
&lt;br /&gt;
* [[Batterieanzeige]]&lt;br /&gt;
* [[Statusanzeige]]&lt;br /&gt;
* [[Fensterkontakt]]&lt;br /&gt;
&lt;br /&gt;
==== basic.shifter ====&lt;br /&gt;
&lt;br /&gt;
Batterieanzeige https://forum.fhem.de/index.php/topic,30909.msg264466.html#msg264466&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Device.dimmer ====&lt;br /&gt;
&lt;br /&gt;
* [[HM Dimmer]]&lt;br /&gt;
&lt;br /&gt;
==== icon ====&lt;br /&gt;
&lt;br /&gt;
* [[Wind]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== zusätzliche Widgets ===&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse zusätzliche Widgets, für die es allerdings keine zentrale Quelle gibt. Stattdessen können diese aus den unterschiedlichen Repositories der Entwickler oder aus Beiträgen im Forum heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Widgets gibt es detailliertere Beschreibungen hier im Wiki:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/ical|ical]], Kalendereinbindung&lt;br /&gt;
&lt;br /&gt;
;bekannte Repositories&lt;br /&gt;
https://github.com/herrmannj/smartvisu-widgets&lt;br /&gt;
* LED&lt;br /&gt;
* UZSU V2.0&lt;br /&gt;
** [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* auth_switch&lt;br /&gt;
* basic&lt;br /&gt;
* basic_extra&lt;br /&gt;
* chart&lt;br /&gt;
* device_extra&lt;br /&gt;
* fritzbox&lt;br /&gt;
** [[smartVISU/fritz!box_via_TR-064|fritz!box_via_TR-064]], Einbindung Anruferliste, Telefonbuch, etc.&lt;br /&gt;
* homematic&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
** [[HM-TC Wandthermostat und HM-CC Heizkörperthermostat]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* httpcmd&lt;br /&gt;
* icon/battery&lt;br /&gt;
* icons&lt;br /&gt;
*img&lt;br /&gt;
* listbutton&lt;br /&gt;
* phoneservice/lib/phone/service&lt;br /&gt;
* selectmenu&lt;br /&gt;
* sonos&lt;br /&gt;
* squeezebox&lt;br /&gt;
* textinput&lt;br /&gt;
* timcounter&lt;br /&gt;
&lt;br /&gt;
https://github.com/ddtlabs/smartvisu-widgets&lt;br /&gt;
&lt;br /&gt;
Voraussetzung für die meisten hier liegenden Widgets ist V2.8 von smartVISU.&lt;br /&gt;
* basic-devices&lt;br /&gt;
* hm-rtr&lt;br /&gt;
* hue&lt;br /&gt;
* media&lt;br /&gt;
* motionDetection&lt;br /&gt;
* powerDistribution&lt;br /&gt;
* sonos&lt;br /&gt;
* ventilation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://github.com/bgewehr/smartVISU&lt;br /&gt;
* basic2.html (LED)&lt;br /&gt;
* qlock.html&lt;br /&gt;
* widget_calendar.html&lt;br /&gt;
* widget_fritzbox.html&lt;br /&gt;
* widget_fritzbox_list.html&lt;br /&gt;
* widget_list.html&lt;br /&gt;
* widget_popup.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/mworion/uzsu_widget&lt;br /&gt;
* uzsu_widget V5.0&lt;br /&gt;
&lt;br /&gt;
https://github.com/2ndsky/quad&lt;br /&gt;
* quad&lt;br /&gt;
&lt;br /&gt;
im Forum&lt;br /&gt;
* [[smartVISU/Temperatur-/Feuchtigkeitssensor]]&lt;br /&gt;
* RTR für MAX! https://forum.fhem.de/index.php?topic=30909.msg241379#msg241379&lt;br /&gt;
* Ein weiteres Widget für ein RTR (Homematic) https://forum.fhem.de/index.php?topic=30909.msg276719#msg276719&lt;br /&gt;
* noch ein widget für homematic für HM-CC-RT-DN https://forum.fhem.de/index.php?topic=30909.msg248462#msg248462&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.smartvisu.de smartVISU Hauptseite von smartVISU]&lt;br /&gt;
&lt;br /&gt;
[http://twig.sensiolabs.org/documentation PHP-Twig Doku]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/archive/p/smartvisu/wikis Google-Archiv smartVISU]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15832</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15832"/>
		<updated>2016-07-17T11:40:30Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Erweiterung der Beschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt das Web-Frontend smartVISU, dessen Funktionen und Konfiguration.  [http://www.smartvisu.de smartVISU] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient. Für die Anbindung an FHEM ist die Installation und Konfiguration von [[Fronthem]] notwendig, dass das Interface für die Anbindung zur Verfügung stellt. &lt;br /&gt;
&lt;br /&gt;
In einem separaten Artikel wird die [[smartVISU Installation|Basis-Installation von smartVISU]] beschrieben, die eine Voraussetzung für die Verwendung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
Ein paar Sceenshots, die einen Eindruck des Frontends vermitteln wurden im {{Link2Forum|Topic= 27291|Message=227568|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Hat man die Installation durchgeführt, befindet sich im root-Verzeichnis der smartVISU Installation für die schnelle Einrichtung die Datei readme.md, in der ein 10-Schritte Guide die erste Konfiguration beschreibt. &lt;br /&gt;
&lt;br /&gt;
Wurden ebenfalls die Erweiterungen für FHEM eingespielt, befindet sich in diesem Verzeichnis ebenfalls die Datei readme.txt, die etwas FHEM-spezifischer ebenfalls den 10-Schritte Guide enthält.&lt;br /&gt;
&lt;br /&gt;
== Bausteine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemuebersicht_fronthem_smartVISU.jpg|550px|thumb|right|Systemübersicht, fronthem/smartVISU]] &lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Statische Seiten ===&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von smartVISU ist ein Web-Server mit PHP notwendig. Dieser stellt die statischen Inhalte des Frontends zur Verfügung. Die Oberfläche muss den eigenen Bedürfnissen per programmieren der Web-Seite anpassen werden. HTML-, PHP- oder  Javascript-Kenntnisse sind hilfreich, aber nicht zwingend erforderlich.&lt;br /&gt;
Genügend Beispiele sind vorhanden und leicht anpassbar, so dass durch einfaches Zusammenstellen schnell eine individuelle Seite erstellt werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
&lt;br /&gt;
Was fronthem für FHEM ist, ist der Treiber für smartVISU. Er ist ein Stück Software (js), das in die ausgeliefertern Webseiten per Link eingebettet ist, auf dem Endgerät ausgeführt wird und die Kommunikation zwischen Endgerät und Websocketserver (fronthem) übernimmt und anpasst {{Link2Forum|Topic=53881|Message=466167|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Ein explizit auf FHEM angepasster Treiber stellt unter anderem die Mandantenfähigkeit (end-device werden seperat betrachtet und beschickt) sicher.&lt;br /&gt;
&lt;br /&gt;
Der Treiber besteht aus den beiden Files [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.js io_fhem.js] und [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.min.js io_fhem.min.js], die im smartVISU/driver/ Verzeichnis der smartVISU Installation abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite auf einem Endgerät auf, wird auf der Config-Seite (Zahnrädersymbol in der oberen Menüzeile)&lt;br /&gt;
* als Driver &amp;quot;Fhem&amp;quot; ausgewählt, &lt;br /&gt;
* die Adresse des Websocketservers, auf dem fronthem ansprechbar ist unter &amp;quot;Address URL/IP&amp;quot; eingetragen und &lt;br /&gt;
* für den Port &amp;quot;2121&amp;quot; gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
smartVISU bietet mit seinem Konzept der Widgets eine flexible Möglichkeit der individuellen Erweiterung an. Für viele Anwendungen gibt es bereits Widgets (z.B. Heizung, RGB, Clock, Wetter, etc.), auf die zurückgegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Mit einem Widget wird für den jeweiligen Anwendungsfall bestimmt, wie auf der Darstellungsseite das Design aussehen soll und auf der Verarbeitungsseite welche Parameter übergeben werden. So könnte man die Widgets auch als Vorlage verstehen, um diese Designelemente bei Bedarf entsprechend einzubinden.&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Schaut man sich die Dokumentation oder die Beispielhäuser an, sollte vorher den Treiber auf offline geschaltet werden, weil sich sonst fronthem die Konfiguration der Demohäuser importiert und merkt {{Link2Forum|Topic=30909|Message=235155|LinkText=(Forum)}}.}}&lt;br /&gt;
Es gibt diverse Standard-Widget, die bereits Teil der smartVISU-Installation sind. Darüber hinaus können eigene oder individualisierte Widgets hinzugefügt werden. &lt;br /&gt;
Die Dokumentation der verfügbaren Standard-Widgets in der Basisinstallation ist im Unterordner /pages/Docu gespeichert. Die Dokumentation kann angeschaut werden, indem man auf der Config-Seite die Page &amp;quot;Docu&amp;quot; auswählt bzw. direkt in die Widgets schaut, die im Stammverzeichnis der smartVISU im Unterordner /widgets abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
== Standard Seitenladeprozess ==&lt;br /&gt;
&lt;br /&gt;
(Übersetzt aus readme.txt)&lt;br /&gt;
&lt;br /&gt;
Ruft man die smartVISU-Seite über den Aufruf &amp;lt;code&amp;gt;http://&amp;lt;Server-IP&amp;gt;/&amp;lt;Installationsverzeichnis&amp;gt;&amp;lt;/code&amp;gt; (z.B. http://192.168.1.1/smartvisu) auf, läuft über die &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; ein vordefinierter Ladezyklus ab, der&lt;br /&gt;
* über die includes.php, die Einstellungen der config.ini einliest,&lt;br /&gt;
* die twig Umgebung startet&lt;br /&gt;
* die Pfade setzt (für pages, icons, Standartwidgets, etc.)&lt;br /&gt;
* die index.html der in der config.ini configurierten Seite ./pages/&amp;lt;eigener Ordner&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Ladeprozess ist in der Datei readme.txt noch etwas detaillierter beschrieben. Der Ladeprozess regelt ebenfalls das Verhalten, wenn noch keine Konfiguration definiert wurde oder bestimmte Dateien an den Orten nicht vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Gibt es vor allen Dingen bei der Ersteinrichtung Probleme, sollte man sich den Ladeprozess und das Vorhandensein der Dateien und die richtige Konfiguration näher anschauen.&lt;br /&gt;
&lt;br /&gt;
== Ersteinrichtung ==&lt;br /&gt;
&lt;br /&gt;
Die folgende Beschreibung setzt voraus, dass die notwendigen Schritte für die grundsätzliche Installation von smartVISU und fronthem bereits erfolgreich durchgeführt wurden.&lt;br /&gt;
&lt;br /&gt;
=== ein &amp;quot;eigenes-Haus&amp;quot; anlegen ===&lt;br /&gt;
&lt;br /&gt;
Es gilt ein eigenes &amp;quot;Haus&amp;quot; anzulegen, dass man individuell konfiguriert.&lt;br /&gt;
&lt;br /&gt;
*  Für eine eigene neue Seite legt man unter ./pages des smartVISU-Root-Verzeichnisses ein neues Verzeichnis &amp;lt;code&amp;gt;eigenes-Haus&amp;lt;/code&amp;gt; an.&lt;br /&gt;
*  Die Dateien auf dem Ordner ./pages/_template kopiert man in dieses Verzeichnis.&lt;br /&gt;
*  Dort editiert man die Dateien und fügt z.B. Dinge ein, die man aus der Doku z.B. auf von www.smartVISU.de heraus kopiert hat. Auch die Beispielhäuser sind sehr hilfreich zum lernen. Einen speziellen Editor oder eine grafische Oberfläche für die Programmierung ist nicht erforderlich. Als erstes passt man z.B. die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; an die eigenen Bedürfnisse an.&lt;br /&gt;
* Die Räume richtet man ein, indem man diese durch Kopien des Beispielraumes (&amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt;) und passende icons und Überschriften erstellt. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* Innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eigener Seiten oder Widgets sollte man darauf achten, nicht in die Dateien der smartVISU-Installation direkt einzugreifen, sondern vornehmlich in den eigenen Pages zu arbeiten. So steht auch einem unbeeinträchtigten späteren Update nichts im Wege.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise anstelle &amp;lt;code&amp;gt;root.html&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;base.html&amp;lt;/code&amp;gt; im Ordner ./pages/base direkt zu verändern, sollte man jeweils angepasste Kopien in das eigene Pages-Verzeichnis legen - diese haben dann Vorrang vor den System Dateien {{Link2Forum|Topic=30909|Message=268592|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Die Template-Engine schaut zuerst im Ordner ./pages/&amp;lt;eigeneSeite&amp;gt; nach und anschließend im Ordner ./pages/base. Dadurch sind Anpassungen an (root, base) etc. für spezielle Geräte möglich {{Link2Forum|Topic=30909|Message=241148|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Für die eigenen Seiteninhalte sollten entsprechend die Dateinamen &amp;quot;base.html, basic.html, device.html&amp;quot; nicht verwendet werden, da dieses System-Seiten sind.&lt;br /&gt;
&lt;br /&gt;
;fronthem&lt;br /&gt;
Obwohl der folgende Teil bereits zur Einrichtung von fronthem gehört, sei es der Vollständigkeit halber des Beispiels hier trotzdem erwähnt:&lt;br /&gt;
* In FHEM eine fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun sollten die GADs aufgelistet werden. Aus der Liste ein GAD auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung Endgerät ===&lt;br /&gt;
Auf dem Endgerät greift man auf die smartVISU-Seiten zu und stellt auf der Config-Seite den Treiber, IP der Servers und den Port ein.&lt;br /&gt;
&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config&amp;lt;/code&amp;gt; bzw. Zahnrad = Config-Menü:&lt;br /&gt;
* Im Feld &amp;quot;Interfaces&amp;quot; für pages das eigenes Haus auswählen (=Ordnername)&lt;br /&gt;
* Der Pagecache sollte zumindest während der Einrichtung ausgeschaltet sein.&lt;br /&gt;
* Im Feld I/O Connection den Treiber Fhem wählen&lt;br /&gt;
* Die IP-Adresse des Servers mit dem Websocket-Server eintragen&lt;br /&gt;
* Port 2121 einstellen&lt;br /&gt;
Nach allen Eintragungen die Konfiguration am unteren Ende der Seite speichern.&lt;br /&gt;
&lt;br /&gt;
Damit die GADs nun im GAD-Editor auf der Detailseite von einem [[fronthem#fronthemEditor|fronthemDevice]] auftauchen, ist es jetzt wichtig, die neue Seite in smartVISU einmal aufzurufen, damit im Hintergrund die GADs übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt, man hat vorher alle notwendigen Schritte für die Installation und Konfiguration von fronthem ausgeführt, kann man nun smartVISU in Verbindung mit FHEM benutzen.&lt;br /&gt;
&lt;br /&gt;
Im Noramlbetrieb stellt man den Pagecache auf &amp;quot;on&amp;quot;- dann werden die templates compiliert gespeichert, was die Geschwindigkeit erhöht {{Link2Forum|Topic=35960|Message=283665|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Die wichtigste Dateien der eigenen Seite ===&lt;br /&gt;
Im Folgenden sind die wichtigsten Dateien und Grundlagen beschrieben, aus der eine Seite zusammensetzt ist, die aus den Template-Dateinen erstellt wurde. Jede Seite besteht aus der Menüzeile, einer Seitenleiste auf der linken Seite und den Hauptbereich auf der rechten Seite.&lt;br /&gt;
&lt;br /&gt;
Entsprechend Browser (z.B. Desktop oder Smartphone) werden die Seiten unterschiedlich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;index.html&lt;br /&gt;
Der Inhalt dieser Seite ist der erste, der aufgerufen wird. Hauptsächlich besteht er aus 2 Blöcken, gekennzeichnet durch&lt;br /&gt;
 {% block sidebar %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
 {% block content %}&lt;br /&gt;
 ...&lt;br /&gt;
 {% endblock %}&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;sidebar&amp;lt;/code&amp;gt; steht der Inhalt, der auf der linken Seite der Startseite dargestellt wird. Im Beispiel wird wird die Uhr, das Datum, das aktuelle Wetter und die Wettervorhersage eingebunden.&lt;br /&gt;
&lt;br /&gt;
Im Block &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; wird die Datei &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt; eingebunden. Der Inhalt dieses Blocks wird im rechten Bereich dargestellt.&lt;br /&gt;
&lt;br /&gt;
;rooms_menu.html&lt;br /&gt;
Diese Datei enthält die Darstellung des Links für die einzelnen Räume wie z.B. &amp;lt;code&amp;gt;room_sleeping.html&amp;lt;/code&amp;gt; für das Schlafzimmer. Ruft man von der Hauptseite einen Raum auf, wird auf einem Desktop-Browser die Seite &amp;lt;code&amp;gt;rooms_menu.html&amp;lt;/code&amp;gt;im linken Bereich im Block Sidebar dargestellt, im rechten Bereich wird der Inhalt des Raums dargestellt.&lt;br /&gt;
&lt;br /&gt;
;room_sleeping.html&lt;br /&gt;
Pro Raum gibt es eine Datei, die die Darstellung eines Raumes festlegen. Dort wie oben, wird der Bereich, der Darstellung über die Blockdefinition festgelegt.&lt;br /&gt;
&lt;br /&gt;
;rooms.html&lt;br /&gt;
Im Rahmen des Ladezyklus, wird diese Datei ebenfalls geladen, läd jedoch ihrerseits gleich die nächste. &lt;br /&gt;
&lt;br /&gt;
;visu.ccs&lt;br /&gt;
Möchte man das Design anpassen, verwendet man eine Stylesheet-Datei &amp;quot;visu.css&amp;quot; in seinem Projektordner. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;visu.js&lt;br /&gt;
In dieser Datei kann Javascrict-Code abgelegt werden, der auf einer Seite aufgerufen wird. Diese Datei ist standardmäßig nicht Teil der Vorlage und kann bei Bedarf angelegt werden.&lt;br /&gt;
&lt;br /&gt;
;menu.html&lt;br /&gt;
Diese Datei ist nicht Teil der Einrichtung über die Vorlage des template-Ordners. Möchte man das Menü anpassen, das oben auf der Seite angezeigt wird, kopiert man die Datei &amp;lt;code&amp;gt;menu.html&amp;lt;/code&amp;gt; aus dem Verzeichnis ./base in sein Verzeichnis ./pages/&amp;lt;eigeneSeite&amp;gt; und passt diese entsprechend an. Über die Reihenfolge, in der die Ordner nach möglichen Dateien durchsucht werden, wird im Folgenden die eigene individualisierte Datei berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Widgets ===&lt;br /&gt;
&lt;br /&gt;
==== Einbindung ====&lt;br /&gt;
&lt;br /&gt;
Eigene oder individualisierte Widgets müssen vor dem Aufruf auf einer Seite &amp;quot;bekannt&amp;quot; gemacht werden. Dafür gibt es unterschiedliche Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
;Import der html-Datei&lt;br /&gt;
&lt;br /&gt;
Einfache Widgets bestehen meist nur aus einer html-Datei. Diese muss vor der ersten Verwendung des Widgets &amp;quot;importiert&amp;quot; werden.&lt;br /&gt;
&lt;br /&gt;
An zentraler Stelle lässt sich dieses wie folgt durchführen. Man&lt;br /&gt;
* legt in seinem Ordner ./pages/eigenes-Haus einen Unterordner ./pages/eigenes-Haus/widgets an.&lt;br /&gt;
* kopiert die widgets-Datei in diesen Ordner.&lt;br /&gt;
* passt die Rechte entsprechend an.&lt;br /&gt;
* fügt der Datei &amp;lt;code&amp;gt;rooms.hmtl&amp;lt;/code&amp;gt; in einer neuen Zeile direkt unterhalb von &amp;lt;code&amp;gt;{% extends &amp;quot;base.html&amp;quot; %}&amp;lt;/code&amp;gt; folgende Zeile ein&lt;br /&gt;
 {% import  &amp;quot;widgets\\temp_sensor.html&amp;quot; as TempSensor %}&lt;br /&gt;
&lt;br /&gt;
Der Dateiname &amp;lt;code&amp;gt;temp_sensor.html&amp;lt;/code&amp;gt; enthält in diesem Beispiel den Code des Widgets {{Link2Forum|Topic=30909|Message=238044|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=238136|LinkText=(Forum)}}, {{Link2Forum|Topic=30909|Message=251586|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Import der Style-Definition und JS&lt;br /&gt;
&lt;br /&gt;
Für komplexere Widgets muss ebenfalls die Style-Datei &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; erweitert werden und Javascript-Code der Datei &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; hinzugefügt werden. Damit der Code nicht komplett in den Dateien verwaltet werden muss, kann über die [https://github.com/ddtlabs/smartvisu-widgets/wiki/HowTo-Install-Widgets hier] beschriebene Methode der Code in Einzeldateien belassen werden. Dieses erleichtert den Überblick und die Möglichkeit separat Weiterentwicklungen der einzelnen Widgets auseinanderzuhalten und zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Über die beschriebene Erweiterung der &amp;lt;code&amp;gt;visu.ccs&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;visu.js&amp;lt;/code&amp;gt; müssen die entsprechenden Teiles eines Widget nur noch einmal in diesen beiden Dateien definiert werden.&lt;br /&gt;
&lt;br /&gt;
Auch hier gibt es die Möglichkeit, die Dateien in einem Unterordner ./pages/eigenes-Haus/widgets abzulegen {{Link2Forum|Topic=30909|Message=276232|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist in diesem {{Link2Forum|Topic=30909|Message=278922|LinkText=Forums-Beitrag}} beschrieben, die allerdings nicht updatesicher für eine mögliche Aktualisierung von smartVISU ist.&lt;br /&gt;
&lt;br /&gt;
==== Aufruf ====&lt;br /&gt;
&lt;br /&gt;
Auf der Seite wird der Aufruf des Widgets eingebettet und über seinen Aufruf ebenfalls positioniert. Beispiele für das Einbetten sind im Docu-Haus enthalten. &lt;br /&gt;
 {{ widgetname.function(&#039;&amp;lt;id&amp;gt;&#039;, &#039;&amp;lt;gad&amp;gt;&#039;, &#039;&amp;lt;weitere Parameter&amp;gt;&#039;) }}&lt;br /&gt;
&lt;br /&gt;
Der Aufruf eines Widgets auf einer Seite besteht jeweils aus einem in doppelt geschweifte Klammern eingefassten Ausdrucks. &lt;br /&gt;
Der Ausdruck besteht aus der Nennung des Widgets, gefolgt von der mit einem Punkt getrennten Funktion. Wie in FHEM üblich ist auch hier die Groß/Kleinschreibung zu berücksichtigen und eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
Im Anschluss in Klammern folgen die durch Komma getrennten Parameter in Hochkommata:&lt;br /&gt;
* id, die ID des Widgets ist eigentlich nur innerhalb von smartVISU wichtig, kann willkürlich gewählt werden, darf sich auf einer html-Seite allerdings nicht wiederholen.&lt;br /&gt;
* gad, wird auch als Item bezeichnet. Dieses ist der Ausdruck, der später an fronthem übergeben wird und entsprechend im GAD-Editor auftaucht für die weitere Verarbeitung und Zuordnung.&lt;br /&gt;
* weitere Parameter, teilweise optional und teilweise mit Default-Werten, wenn diese nicht angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Ein etwas detaillierteres Beispiel findet sich innerhalb der [http://leseprobe.smartvisu.de/index.php?page=grundlagen_widget Leseprobe] der Dokumentation auf der smartVISU-Homepage.&lt;br /&gt;
&lt;br /&gt;
== Codebeispiele ==&lt;br /&gt;
&lt;br /&gt;
{{Baustelle|Dieser Bereich befindet sich in Überarbeitung und kann gerne erweitert werden.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[Leselampe]]&lt;br /&gt;
* [[HM-TC Wandthermostat und HM-CC Heizkörperthermostat]]&lt;br /&gt;
* [[Batterieanzeige]]&lt;br /&gt;
* [[Statusanzeige]]&lt;br /&gt;
* [[nur aktiven switch darstellen und schalten]]&lt;br /&gt;
* [[Rolladen]]&lt;br /&gt;
* [[Wind]]&lt;br /&gt;
* [[Fensterkontakt]]&lt;br /&gt;
* [[Basic Switch]]&lt;br /&gt;
* [[HM Dimmer]]&lt;br /&gt;
* [[Reload Button]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/IconHighlights in Menus|IconHighlights in Menus]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard-Widgets ===&lt;br /&gt;
&lt;br /&gt;
{{TODO|Hier sollte nicht die Dokumentation der Standardwidgets wiedergegeben werden, sondern Spezifika, die nicht in der Dokumentation auftauchen oder Anwendungsbeispiele.}}&lt;br /&gt;
* [[smartVISU/lichtSzene|lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
=== zusätzliche Widgets ===&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Widgets werden im git-Repository https://github.com/herrmannj/smartvisu-widgets bereitgestellt:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* [[smartVISU/ical|ical]], Kalendereinbindung&lt;br /&gt;
* [[smartVISU/fritz!box_via_TR-064|fritz!box_via_TR-064]], Einbindung Anruferliste, Telefonbuch, etc.&lt;br /&gt;
* [[smartVISU/Temperatur-/Feuchtigkeitssensor]]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;!-- Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* fritz!box_v6.20&lt;br /&gt;
* [[von Bgewehr]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.smartvisu.de smartVISU Hauptseite von smartVISU]&lt;br /&gt;
&lt;br /&gt;
[http://twig.sensiolabs.org/documentation PHP-Twig Doku]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/archive/p/smartvisu/wikis Google-Archiv smartVISU]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15831</id>
		<title>SmartVISU Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15831"/>
		<updated>2016-07-17T11:35:53Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Verlagern der Einrichtungsanteile in den smartVISU-Hauptartikel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU Installation}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Installation des Web-Frontends [[smartVISU]] und berücksichtigt mehrerer Alternativen für unterschiedliche Web-Server. Zum Betrieb von smartVISU mit FHEM ist die Installation und Konfiguration von [[fronthem]] erforderlich.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Für die Installation ist es immer sinnvoll, von einem auf aktuellem Stand befindlichen System zu starten.&lt;br /&gt;
&lt;br /&gt;
Für das Betriebssystem (Linuxderivat)&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Für FHEM&lt;br /&gt;
 &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in der Eingabezeile&lt;br /&gt;
&lt;br /&gt;
Die Installation lässt sich in 4 Bereiche unterteilen.&lt;br /&gt;
&lt;br /&gt;
== Webserver installieren ==&lt;br /&gt;
&lt;br /&gt;
Welcher Webserver zum Einsatz kommt, ist unerheblich. Im Folgenden sind Beispiele für lighttpd, nginx und Apache2 zu finden. Es wird nur &#039;&#039;&#039;eine&#039;&#039;&#039; Installation benötigt.&lt;br /&gt;
&lt;br /&gt;
=== lighttpd ===&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic= 27291|Message=208880|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Webserver installieren:&lt;br /&gt;
 sudo apt-get install lighttpd&lt;br /&gt;
&lt;br /&gt;
PHP installieren:&lt;br /&gt;
 sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
&lt;br /&gt;
PHP konfigurieren:&lt;br /&gt;
 sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
&lt;br /&gt;
Webserver-Dienst einmal neu starten, damit die Einstellungen wirksam werden:&lt;br /&gt;
 sudo service lighttpd force-reload&lt;br /&gt;
&lt;br /&gt;
Welchseln in des Root-Verzeichnis des Webservers (bei Bedarf, wenn sich das Root-Verzeichnis einer Distribution woanders ist, muss dieser Pfad entsprechend angepasst werden):&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chown www-data:www-data /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen des Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chmod 775 /var/www&lt;br /&gt;
&lt;br /&gt;
=== nginx ===&lt;br /&gt;
==== mit PHP5 ====&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic=30909|Message=273180|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
         listen 80;&lt;br /&gt;
         root /var/www;&lt;br /&gt;
         index index.html index.php;&lt;br /&gt;
         server_name localhost;&lt;br /&gt;
         location / {&lt;br /&gt;
               try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
         }&lt;br /&gt;
         location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
                 include fastcgi_params;&lt;br /&gt;
          }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mit PHP7 ====&lt;br /&gt;
Ubuntu 16.04 läuft standardmäßig mit PHP7. Der Betrieb ist noch nicht zu 100% getestet und daher ohne Garantie.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php7.0-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 default_server;&lt;br /&gt;
        listen [::]:80 default_server;&lt;br /&gt;
        root /var/www/html;&lt;br /&gt;
        index index.php index.html index.htm index.nginx-debian.html;&lt;br /&gt;
&lt;br /&gt;
        server_name _;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                try_files $uri $uri/ =404;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                 fastcgi_pass unix:/run/php/php7.0-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 include fastcgi.conf;&lt;br /&gt;
                 fastcgi_read_timeout 600;&lt;br /&gt;
         }&lt;br /&gt;
         location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {&lt;br /&gt;
                 access_log off; log_not_found off; expires 30d;&lt;br /&gt;
         }&lt;br /&gt;
         location = /robots.txt { access_log off; log_not_found off; }&lt;br /&gt;
         location ~ /\. { deny all; access_log off; log_not_found off; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Apache2 ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem [http://www.meintechblog.de/2015/06/smartvisu-mit-fhem-die-perfekte-visualisierung-teil-1-basics/ Blogeintrag].&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install apache2 php5 libapache2-mod-php5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für das git /cleaninstall: da liegt die erweiterte smartVISU, mit Mandanten und reparierten widgets (wo nötig) - ansonsten aber unverfälscht und nicht mit widgets erweitert.&lt;br /&gt;
&lt;br /&gt;
== smartVISU Installation ==&lt;br /&gt;
&lt;br /&gt;
Für das Klonen (Herunterladen) wird folgendes Paket benötigt:&lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
;Verfügbare Versionen (Stand Juli 2016):&lt;br /&gt;
Bis zur V2.7 gibt es ein offizielles Release, auf dem sowohl die Dokumentation auf der Seite [www.smartVISU.de] basiert, als auch das nachfolgend beschriebene smartvisu-cleaninstall.&lt;br /&gt;
&lt;br /&gt;
Die nicht offizielle V2.8 kann aus den Entwicklungszweig von smartVISU heruntergeladen werden, muss aber im Anschluss um die Erweiterungen für den Betrieb mit FHEM ergänzt werden. Ob es ein offizielles Release V2.8 geben wird, ist derzeit unbekannt. Unabhängig davon wird an einem Fork in Zusammenhang für den Betrieb mit FHEM gearbeitet.&lt;br /&gt;
&lt;br /&gt;
Zwar sollten alle Widgets, die auf V2.7 lauffähig sind, auch mit V2.8 kompatibel sein, dieses ist derzeit aber nicht getestet und kann nicht garantiert werden. Die Widgets müssen bei Bedarf entsprechend angepasst werden. Andererseits gibt es bereits Widgets, die V2.8 voraussetzen. Bei manchen Widgets sind die Voraussetzungen ist der Dokumentation beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Unterschiede zwischen V2.7 und V2.8 sind in diesem {{Link2Forum|Topic=54506|Message=469401|LinkText=Beitrag}} zusammengefasst. &lt;br /&gt;
&lt;br /&gt;
Derzeit kann aber bereits empfohlen werden, bei einer Neuinstallation gleich V2.8 zu installieren {{Link2Forum|Topic=53881|Message=471075|LinkText=(Forum)}}.&lt;br /&gt;
 &lt;br /&gt;
=== smartVISU-cleaninstall, V2.7 ===&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
Für die Installation gibt es ein fertig zusammengestelltes Paket aus dem git-Repo von Jörg Herrmanns ([https://github.com/herrmannj/smartvisu-cleaninstall]).&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das Original smartVISU inkl. einigen Anpassungen (fhem-Treiber, Widget-Korrekturen, ...).&lt;br /&gt;
&lt;br /&gt;
Einrichten eines Installationsordners im home-Verzeichnis:&lt;br /&gt;
 mkdir ~/install&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd ~/install&lt;br /&gt;
&lt;br /&gt;
Klonen der Pakets:&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
Dabei wird der Unterordner ./smartvisu-cleaninstall angelegt, in den die Dateien heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
Damit der Webserver die Seiten von smartVISU zur Verfügung stellt, müssen diese an die richtige Stelle in Abhängigkeit des verwendeten Webservers und Konfiguration kopiert werden. Ggf. muss die Konfiguration des Webservers entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das neu erstellte Verzeichnis in das Root-Verzeichnis des Webservers kopieren. Dass, wie in diesem Fall angegeben, das Verzeichnis /var/www/ das richtige Verzeichnis ist, kann z.B. dadurch bestätigt werden, dass dort bereits die Default-Seite des Webservers nach der Ersteinrichtung zu finden ist. Bei Bedarf ist das Verzeichnis anzupassen.&lt;br /&gt;
 sudo cp -rp smartvisu-cleaninstall /var/www/smartVISU&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich lässt dich auch ein anderes Installationsverzeichnis wählen. Die folgenden Schritte müssen dann entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Berechtigungen setzen ====&lt;br /&gt;
Später wird zumindest die Konfiguration von dem, was auf dem Endgerät angezeigt werden soll, vom Endgerät aus konfiguriert. Damit dieses auch funktioniert, müssen die Berechtigungen der Seiten entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis von smartVISU&lt;br /&gt;
 chown -R www-data:www-data smartVISU&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen für das Root-Verzeichnis &amp;quot;smartVISU&amp;quot; und alle Unterordner&lt;br /&gt;
 chmod -R 775 smartVISU&lt;br /&gt;
&lt;br /&gt;
==== ggf. Gruppenmitgliedschaft anpassen ====&lt;br /&gt;
Dieser Schritt ist optional und dann hilfreich, wenn man mit einem normalen user z.B. über fileZilla die Dateien austauschen möchte. Da der Schritt zulasten der Sicherheit geht, sollte man ihn nach Abschluss der Konfiguration ggf. wieder rückgängig machen.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der user &amp;quot;pi&amp;quot; zur Gruppe &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; hinzugefügt. Verwendet man einen anderen user, muss dieses selbstverständig angepasst werden.&lt;br /&gt;
 sudo usermod -a -G www-data pi&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen kann man die Gruppenzugehörigkeit über&lt;br /&gt;
 sudo deluser pi www-data&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
Hierbei handelt es sich um die Hauptdatei mit der das Verhalten von smartVISU gesteuert wird.&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;config.ini.default&amp;quot; muss zu &amp;quot;config.ini&amp;quot; umbenennen oder besser kopiert werden:&lt;br /&gt;
 sudo cp /var/www/smartVISU/config.ini.default /var/www/smartVISU/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Installation überprüfen ====&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartVISU&amp;lt;/code&amp;gt; sollte folgende Seite angezeigt werden: {{Randnotiz|RNTyp=y|RNText=&lt;br /&gt;
Ggf. in der php.ini (error_reporting) die Ausgabe von Warnings abschalten, wenn so was kommt wie &amp;quot;Notice: Undefined index...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Diese Seite wird ggf. nur einmal direkt nach der Ersteinrichtung angezeigt und ist im Folgenden nicht mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
=== nicht offizielle Version, V2.8 ===&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung für die Installation der nicht offiziellen Version 2.8 von smartVISU basiert auf diesem [https://github.com/ddtlabs/build-smartvisu-cleaninstall Git-Eintrag] von [user=dev0].&lt;br /&gt;
&lt;br /&gt;
Da man das Softwarepaket für smartVISU direkt aus dem Entwicklungszweig herunterläd, müssen die notwendigen Erweiterungen für den Betrieb mit FHEM nachträglich manuell eingefügt werden. Dabei ist der &amp;quot;Treiber&amp;quot; am wichtigsten.&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen, ist im folgenden Beispiel das Root-Verzeichnis des Webservers &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; und das Verzeichnis, in das smartVISU installiert wird &amp;quot;sv&amp;quot;.&lt;br /&gt;
Die smartVISU-Seite wird am Ende der Installation entsprechend mit &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/sv&amp;lt;/code&amp;gt; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Anpassen der Gruppenmitgliedschaften kann nach dem oben beschriebenen Muster durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
&lt;br /&gt;
Die Dateien werden direkt aus dem Entwicklungszweig heruntergeladen.&lt;br /&gt;
 git clone https://github.com/Martin-Gleiss/smartvisu.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
 sudo cp -rp smartvisu /var/www/html/sv&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen der Erweiterungen für FHEM ====&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren der Erweiterungen ====&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/readme.txt /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/functions_config.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/includes.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/config.ini.default /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/pages/base/configure.php /var/www/html/sv/pages/base/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.js /var/www/html/sv/driver/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.min.js /var/www/html/sv/driver/&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
 sudo cp /var/www/html/sv/config.ini.default /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Setzen der Berechtigungen (Besitzer und Gruppe) ====&lt;br /&gt;
 cd /var/www/html&lt;br /&gt;
 sudo chown -R www-data:www-data sv&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
&lt;br /&gt;
Wird derzeit nicht unterstützt {{Link2Forum|Topic=43226|Message=352115|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Performanceproblem ===&lt;br /&gt;
&lt;br /&gt;
Während der Entwicklung gab es mehrere Evolutionen, was die Verbindung über den Treiber angeht. Trotzdem hat auch die Platform, auf der smartVISU läuft einen gehörigen Anteil an der Reaktivität der Oberfläche. Darüber hinaus hat selbstredend die Komplexität einer Seite Einfluss auf die Geschwindigkeit.&lt;br /&gt;
Mit einem Webserver auf dem RPi2 scheint es noch potential nach oben zu geben, setzte man eine performantere Platform ein {{Link2Forum|Topic= 48243|Message=402427|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Config-Seite anstatt der individuellen Seite ===&lt;br /&gt;
&lt;br /&gt;
Es wurde vergessen, die Datei config.ini.default nach config.ini zu kopieren {{Link2Forum|Topic= 46501|Message=382426|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsprobleme mit Apache ===&lt;br /&gt;
Anscheinend gab es vereinzelt Zugriffsprobleme auf das smartVISU-Vereichnis, die sich aber mit dieser Erweiterung der Apache-Konfiguration beheben lies {{Link2Forum|Topic=30909|Message=239882|LinkText=(Forum)}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/smartvisu&amp;quot;&amp;gt;&lt;br /&gt;
    Options +Indexes FollowSymLinks +ExecCGI&lt;br /&gt;
    AllowOverride AuthConfig FileInfo&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 404 not found ===&lt;br /&gt;
&lt;br /&gt;
Wird noch nicht einmal die Seite gefunden (404), sind bereits die statischen Seiteninhalte der Webseite nicht richtig konfiguriert. Es muss sichergestellt werden, dass eine Datei im Verzeichnis von smartVISU von einem Endgerät angezeigt werden kann {{Link2Forum|Topic= 46501|Message=49524|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== *.js dateien ===&lt;br /&gt;
&lt;br /&gt;
Sollte jemand Änderungen an den *.js Dateien bearbeiten muss man daran denken, dass in der config.ini ganz unten vereinbart wird welche Version der Datei benutzt wird {{Link2Forum|Topic=30909|Message=252375|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== verschiedene Devices, verschiedene Anzeigen ===&lt;br /&gt;
&lt;br /&gt;
Möchte man sicherstellen, dass auf allen Endgeräten die gleiche page konfiguriert ist, verschiebt man den entsprechenden Teil in der config.ini in den &amp;lt;nowiki&amp;gt;[default]&amp;lt;/nowiki&amp;gt;-Bereich. &lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei eindringlich empfohlen, diese Änderung nur bei nicht laufendem Websocket durchzuführen und in jedem Falle ein Backup der Datei vorzuhalten. Bei Syntaxfehlern wird diese Datei neu erzeugt und überschreibt ohne Nachfrage die Vorversion {{Link2Forum|Topic=46541|Message=383006|LinkText=(Forum)}} {{Link2Forum|Topic=36420|Message=287038|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Welcher Treiber ist installiert ===&lt;br /&gt;
&lt;br /&gt;
Um zu prüfen, welche Version vom Treiber man aktuell verwendet, kann man im Browser die Konsole öffnen und nach einem page reload diesen Log-Eintrag suchen:&lt;br /&gt;
&lt;br /&gt;
 [io.fhem]: init [V1.10] (address= ...&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel ist es Version 1.10 {{Link2Forum|Topic=35960|Message=283617|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== neue Clients ===&lt;br /&gt;
&lt;br /&gt;
Das Anlegen neuer Clients In smartVISU müssen nicht händisch ergänzt werden. In der config.ini gibt es den parameter auto_add = true|false. Wenn dieser auf true steht, werden neue Clients automatisch in smartVISU angelegt und bekommen eine Kopie der default Einstellungen.&lt;br /&gt;
Im Anschluss können über die Config-Seite die individuellen Einstellungen über die smartVISU-Oberfläche konfiguriert und gespeichert werden (page, design, evtl. calender, etc) {{Link2Forum|Topic=30909|Message=236222|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Dateien ===&lt;br /&gt;
Auch wenn es im Normalfall nicht notwendig ist sollte, kann es manchmal sinnvoll sein, den genauen Speicherort aller Dateien und Konfigurationsdateien zu kennen und entsprechend Debugging-Trigger hinzuzufügen oder Konfigurationen direkt zu korrigieren. &lt;br /&gt;
&lt;br /&gt;
Die folgenden Pfadangaben gehen davon aus, dass das Root-Verzeichnis des eingesetzten Webservers /var/www/html/ ist und smartVISU im Unterordner /var/www/html/sv liegt.&lt;br /&gt;
&lt;br /&gt;
Dokumenten Root für smartVISU:&lt;br /&gt;
 /var/www/html/sv/&lt;br /&gt;
&lt;br /&gt;
Konfigurationsdatei von smartVISU:&lt;br /&gt;
 /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
Treiber:&lt;br /&gt;
 /var/www/html/sv/driver/io-fhem.js&lt;br /&gt;
&lt;br /&gt;
 /var/www/html/sv/driver/io_fhem.min.js &lt;br /&gt;
&lt;br /&gt;
Temp-Ordner:&lt;br /&gt;
 /var/www/html/sv/temp&lt;br /&gt;
&lt;br /&gt;
Template-Ordner für neue &amp;quot;page&amp;quot;:&lt;br /&gt;
 /var/www/html/sv/pages/_template&lt;br /&gt;
&lt;br /&gt;
Eigener Page-Ordner&lt;br /&gt;
 /var/www/html/sv/pages/&amp;lt;eigeneSeite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15819</id>
		<title>SmartVISU Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15819"/>
		<updated>2016-07-12T19:10:04Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* smartVISU Installation */ V2.7 &amp;lt;-&amp;gt; V2.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU Installation}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Installation des Web-Frontends [[smartVISU]] und berücksichtigt mehrerer Alternativen für unterschiedliche Web-Server. Zum Betrieb von smartVISU mit FHEM ist die Installation und Konfiguration von [[fronthem]] erforderlich.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Für die Installation ist es immer sinnvoll, von einem auf aktuellem Stand befindlichen System zu starten.&lt;br /&gt;
&lt;br /&gt;
Für das Betriebssystem (Linuxderivat)&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Für FHEM&lt;br /&gt;
 &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in der Eingabezeile&lt;br /&gt;
&lt;br /&gt;
Die Installation lässt sich in 4 Bereiche unterteilen.&lt;br /&gt;
&lt;br /&gt;
== Webserver installieren ==&lt;br /&gt;
&lt;br /&gt;
Welcher Webserver zum Einsatz kommt, ist unerheblich. Im Folgenden sind Beispiele für lighttpd, nginx und Apache2 zu finden. Es wird nur &#039;&#039;&#039;eine&#039;&#039;&#039; Installation benötigt.&lt;br /&gt;
&lt;br /&gt;
=== lighttpd ===&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic= 27291|Message=208880|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Webserver installieren:&lt;br /&gt;
 sudo apt-get install lighttpd&lt;br /&gt;
&lt;br /&gt;
PHP installieren:&lt;br /&gt;
 sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
&lt;br /&gt;
PHP konfigurieren:&lt;br /&gt;
 sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
&lt;br /&gt;
Webserver-Dienst einmal neu starten, damit die Einstellungen wirksam werden:&lt;br /&gt;
 sudo service lighttpd force-reload&lt;br /&gt;
&lt;br /&gt;
Welchseln in des Root-Verzeichnis des Webservers (bei Bedarf, wenn sich das Root-Verzeichnis einer Distribution woanders ist, muss dieser Pfad entsprechend angepasst werden):&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chown www-data:www-data /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen des Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chmod 775 /var/www&lt;br /&gt;
&lt;br /&gt;
=== nginx ===&lt;br /&gt;
==== mit PHP5 ====&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic=30909|Message=273180|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
         listen 80;&lt;br /&gt;
         root /var/www;&lt;br /&gt;
         index index.html index.php;&lt;br /&gt;
         server_name localhost;&lt;br /&gt;
         location / {&lt;br /&gt;
               try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
         }&lt;br /&gt;
         location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
                 include fastcgi_params;&lt;br /&gt;
          }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mit PHP7 ====&lt;br /&gt;
Ubuntu 16.04 läuft standardmäßig mit PHP7. Der Betrieb ist noch nicht zu 100% getestet und daher ohne Garantie.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php7.0-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 default_server;&lt;br /&gt;
        listen [::]:80 default_server;&lt;br /&gt;
        root /var/www/html;&lt;br /&gt;
        index index.php index.html index.htm index.nginx-debian.html;&lt;br /&gt;
&lt;br /&gt;
        server_name _;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                try_files $uri $uri/ =404;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                 fastcgi_pass unix:/run/php/php7.0-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 include fastcgi.conf;&lt;br /&gt;
                 fastcgi_read_timeout 600;&lt;br /&gt;
         }&lt;br /&gt;
         location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {&lt;br /&gt;
                 access_log off; log_not_found off; expires 30d;&lt;br /&gt;
         }&lt;br /&gt;
         location = /robots.txt { access_log off; log_not_found off; }&lt;br /&gt;
         location ~ /\. { deny all; access_log off; log_not_found off; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Apache2 ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem [http://www.meintechblog.de/2015/06/smartvisu-mit-fhem-die-perfekte-visualisierung-teil-1-basics/ Blogeintrag].&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install apache2 php5 libapache2-mod-php5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für das git /cleaninstall: da liegt die erweiterte smartVISU, mit Mandanten und reparierten widgets (wo nötig) - ansonsten aber unverfälscht und nicht mit widgets erweitert.&lt;br /&gt;
&lt;br /&gt;
== smartVISU Installation ==&lt;br /&gt;
&lt;br /&gt;
Für das Klonen (Herunterladen) wird folgendes Paket benötigt:&lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Verfügbare Versionen (Stand Juli 2016) ===&lt;br /&gt;
Bis zur V2.7 gibt es ein offizielles Release, auf dem sowohl die Dokumentation auf der Seite [http://www.smartVISU.de www.smartVISU.de] basiert, als auch das nachfolgend beschriebene smartvisu-cleaninstall, V2.7.&lt;br /&gt;
&lt;br /&gt;
Die nicht offizielle V2.8 kann aus einem Entwicklungszweig heruntergeladen werden, muss aber im Anschluss um die Erweiterungen für den Betrieb mit FHEM ergänzt werden. Ob es ein offizielles Release V2.8 geben wird, ist derzeit unbekannt. Unabhängig davon wird an einem Fork in Zusammenhang für den Betrieb mit FHEM gearbeitet.&lt;br /&gt;
&lt;br /&gt;
Zwar sollten alle Widgets, die auf V2.7 lauffähig sind, auch mit V2.8 kompatibel sein, dieses ist derzeit aber nicht getestet und kann nicht garantiert werden. Die Widgets müssen bei Bedarf entsprechend angepasst werden. Andererseits gibt es bereits Widgets, die V2.8 voraussetzen. Bei manchen Widgets sind die Voraussetzungen ist der Dokumentation beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Unterschiede zwischen V2.7 und V2.8 sind in diesem {{Link2Forum|Topic=54506|Message=469401|LinkText=Beitrag}} zusammengefasst. &lt;br /&gt;
&lt;br /&gt;
Zum jetzigen Zeitpunkt wird allerdings bereits empfohlen, bei einer Neuinstallation V2.8 zu installieren {{Link2Forum|Topic=53881|Message=471075|LinkText=(Forum)}}.&lt;br /&gt;
 &lt;br /&gt;
=== smartVISU-cleaninstall, V2.7 ===&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
Für die Installation gibt es ein fertig zusammengestelltes Paket aus dem git-Repo von Jörg Herrmanns ([https://github.com/herrmannj/smartvisu-cleaninstall]).&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das Original smartVISU inkl. einigen Anpassungen (fhem-Treiber, Widget-Korrekturen, ...).&lt;br /&gt;
&lt;br /&gt;
Einrichten eines Installationsordners im home-Verzeichnis:&lt;br /&gt;
 mkdir ~/install&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd ~/install&lt;br /&gt;
&lt;br /&gt;
Klonen der Pakets:&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
Dabei wird der Unterordner ./smartvisu-cleaninstall angelegt, in den die Dateien heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
Damit der Webserver die Seiten von smartVISU zur Verfügung stellt, müssen diese an die richtige Stelle in Abhängigkeit des verwendeten Webservers und Konfiguration kopiert werden. Ggf. muss die Konfiguration des Webservers entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das neu erstellte Verzeichnis in das Root-Verzeichnis des Webservers kopieren. Dass, wie in diesem Fall angegeben, das Verzeichnis /var/www/ das richtige Verzeichnis ist, kann z.B. dadurch bestätigt werden, dass dort bereits die Default-Seite des Webservers nach der Ersteinrichtung zu finden ist. Bei Bedarf ist das Verzeichnis anzupassen.&lt;br /&gt;
 sudo cp -rp smartvisu-cleaninstall /var/www/smartVISU&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich lässt dich auch ein anderes Installationsverzeichnis wählen. Die folgenden Schritte müssen dann entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Berechtigungen setzen ====&lt;br /&gt;
Später wird zumindest die Konfiguration von dem, was auf dem Endgerät angezeigt werden soll, vom Endgerät aus konfiguriert. Damit dieses auch funktioniert, müssen die Berechtigungen der Seiten entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis von smartVISU&lt;br /&gt;
 chown -R www-data:www-data smartVISU&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen für das Root-Verzeichnis &amp;quot;smartVISU&amp;quot; und alle Unterordner&lt;br /&gt;
 chmod -R 775 smartVISU&lt;br /&gt;
&lt;br /&gt;
==== ggf. Gruppenmitgliedschaft anpassen ====&lt;br /&gt;
Dieser Schritt ist optional und dann hilfreich, wenn man mit einem normalen user z.B. über fileZilla die Dateien austauschen möchte. Da der Schritt zulasten der Sicherheit geht, sollte man ihn nach Abschluss der Konfiguration ggf. wieder rückgängig machen.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der user &amp;quot;pi&amp;quot; zur Gruppe &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; hinzugefügt. Verwendet man einen anderen user, muss dieses selbstverständig angepasst werden.&lt;br /&gt;
 sudo usermod -a -G www-data pi&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen kann man die Gruppenzugehörigkeit über&lt;br /&gt;
 sudo deluser pi www-data&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
Hierbei handelt es sich um die Hauptdatei mit der das Verhalten von smartVISU gesteuert wird.&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;config.ini.default&amp;quot; muss zu &amp;quot;config.ini&amp;quot; umbenennen oder besser kopiert werden:&lt;br /&gt;
 sudo cp /var/www/smartVISU/config.ini.default /var/www/smartVISU/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Installation überprüfen ====&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartVISU&amp;lt;/code&amp;gt; sollte folgende Seite angezeigt werden: {{Randnotiz|RNTyp=y|RNText=&lt;br /&gt;
Ggf. in der php.ini (error_reporting) die Ausgabe von Warnings abschalten, wenn so was kommt wie &amp;quot;Notice: Undefined index...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Diese Seite wird ggf. nur einmal direkt nach der Ersteinrichtung angezeigt und ist im Folgenden nicht mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
=== nicht offizielle Version, V2.8 ===&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung für die Installation der nicht offiziellen Version 2.8 von smartVISU basiert auf diesem [https://github.com/ddtlabs/build-smartvisu-cleaninstall Git-Eintrag] von [user=dev0].&lt;br /&gt;
&lt;br /&gt;
Da man das Softwarepaket für smartVISU direkt aus dem Entwicklungszweig herunterläd, müssen die notwendigen Erweiterungen für den Betrieb mit FHEM nachträglich manuell eingefügt werden. Dabei ist der &amp;quot;Treiber&amp;quot; am wichtigsten.&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen, ist im folgenden Beispiel das Root-Verzeichnis des Webservers &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; und das Verzeichnis, in das smartVISU installiert wird &amp;quot;sv&amp;quot;.&lt;br /&gt;
Die smartVISU-Seite wird am Ende der Installation entsprechend mit &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/sv&amp;lt;/code&amp;gt; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Anpassen der Gruppenmitgliedschaften kann nach dem oben beschriebenen Muster durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
&lt;br /&gt;
Die Dateien werden direkt aus dem Entwicklungszweig heruntergeladen.&lt;br /&gt;
 git clone https://github.com/Martin-Gleiss/smartvisu.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
 sudo cp -rp smartvisu /var/www/html/sv&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen der Erweiterungen für FHEM ====&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren der Erweiterungen ====&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/readme.txt /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/functions_config.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/includes.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/config.ini.default /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/pages/base/configure.php /var/www/html/sv/pages/base/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.js /var/www/html/sv/driver/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.min.js /var/www/html/sv/driver/&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
 sudo cp /var/www/html/sv/config.ini.default /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Setzen der Berechtigungen (Besitzer und Gruppe) ====&lt;br /&gt;
 cd /var/www/html&lt;br /&gt;
 sudo chown -R www-data:www-data sv&lt;br /&gt;
&lt;br /&gt;
== ein eigenes &amp;quot;Haus&amp;quot; anlegen ==&lt;br /&gt;
Nun gilt es nur noch ein eigenes &amp;quot;Haus&amp;quot; anzulegen, dass man individuell konfiguriert.&lt;br /&gt;
&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
&lt;br /&gt;
Obwohl der folgende Teil bereits zur Einrichtung von fronthem gehört, sei es der Vollständigkeit halber des Beispiels hier trotzdem erwähnt:&lt;br /&gt;
* In FHEM eine fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun sollten die GADs aufgelistet werden. Aus der Liste ein GAD auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung Endgerät ==&lt;br /&gt;
Als letztes greift man vom Endgerät auf die smartVISU-Seiten zu und stellt auf der Config-Seite den Treiber, IP der Servers und den Port ein.&lt;br /&gt;
&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config&amp;lt;/code&amp;gt; bzw. Zahnrad = Config-Menü:&lt;br /&gt;
* Im Feld &amp;quot;Interfaces&amp;quot; für pages das eigenes Haus auswählen (=Ordnername)&lt;br /&gt;
* Der Pagecache sollte zumindest während der Einrichtung ausgeschaltet sein.&lt;br /&gt;
* Im Feld I/O Connection den Treiber Fhem wählen&lt;br /&gt;
* Die IP-Adresse des Servers mit dem Websocket-Server eintragen&lt;br /&gt;
* Port 2121 einstellen&lt;br /&gt;
Nach allen Eintragungen die Konfiguration am unteren Ende der Seite speichern.&lt;br /&gt;
&lt;br /&gt;
Damit die GADs nun im GAD-Editor auf der Detailseite von einem [[fronthem#fronthemEditor|fronthemDevice]] auftauchen, ist es jetzt wichtig, die neue Seite in smartVISU einmal aufzurufen, damit im Hintergrund die GADs übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt, man hat vorher alle notwendigen Schritte für die Installation und Konfiguration von fronthem ausgeführt, kann man nun smartVISU in Verbindung mit FHEM benutzen.&lt;br /&gt;
&lt;br /&gt;
Im Noramlbetrieb stellt man den Pagecache auf &amp;quot;on&amp;quot;- dann werden die templates compiliert gespeichert, was die Geschwindigkeit erhöht {{Link2Forum|Topic=35960|Message=283665|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
&lt;br /&gt;
Wird derzeit nicht unterstützt {{Link2Forum|Topic=43226|Message=352115|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Performanceproblem ===&lt;br /&gt;
&lt;br /&gt;
Während der Entwicklung gab es mehrere Evolutionen, was die Verbindung über den Treiber angeht. Trotzdem hat auch die Platform, auf der smartVISU läuft einen gehörigen Anteil an der Reaktivität der Oberfläche. Darüber hinaus hat selbstredend die Komplexität einer Seite Einfluss auf die Geschwindigkeit.&lt;br /&gt;
Mit einem Webserver auf dem RPi2 scheint es noch potential nach oben zu geben, setzte man eine performantere Platform ein {{Link2Forum|Topic= 48243|Message=402427|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Config-Seite anstatt der individuellen Seite ===&lt;br /&gt;
&lt;br /&gt;
Es wurde vergessen, die Datei config.ini.default nach config.ini zu kopieren {{Link2Forum|Topic= 46501|Message=382426|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsprobleme mit Apache ===&lt;br /&gt;
Anscheinend gab es vereinzelt Zugriffsprobleme auf das smartVISU-Vereichnis, die sich aber mit dieser Erweiterung der Apache-Konfiguration beheben lies {{Link2Forum|Topic=30909|Message=239882|LinkText=(Forum)}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/smartvisu&amp;quot;&amp;gt;&lt;br /&gt;
    Options +Indexes FollowSymLinks +ExecCGI&lt;br /&gt;
    AllowOverride AuthConfig FileInfo&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 404 not found ===&lt;br /&gt;
&lt;br /&gt;
Wird noch nicht einmal die Seite gefunden (404), sind bereits die statischen Seiteninhalte der Webseite nicht richtig konfiguriert. Es muss sichergestellt werden, dass eine Datei im Verzeichnis von smartVISU von einem Endgerät angezeigt werden kann {{Link2Forum|Topic= 46501|Message=49524|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== *.js dateien ===&lt;br /&gt;
&lt;br /&gt;
Sollte jemand Änderungen an den *.js Dateien bearbeiten muss man daran denken, dass in der config.ini ganz unten vereinbart wird welche Version der Datei benutzt wird {{Link2Forum|Topic=30909|Message=252375|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== verschiedene Devices, verschiedene Anzeigen ===&lt;br /&gt;
&lt;br /&gt;
Möchte man sicherstellen, dass auf allen Endgeräten die gleiche page konfiguriert ist, verschiebt man den entsprechenden Teil in der config.ini in den &amp;lt;nowiki&amp;gt;[default]&amp;lt;/nowiki&amp;gt;-Bereich. &lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei eindringlich empfohlen, diese Änderung nur bei nicht laufendem Websocket durchzuführen und in jedem Falle ein Backup der Datei vorzuhalten. Bei Syntaxfehlern wird diese Datei neu erzeugt und überschreibt ohne Nachfrage die Vorversion {{Link2Forum|Topic=46541|Message=383006|LinkText=(Forum)}} {{Link2Forum|Topic=36420|Message=287038|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Welcher Treiber ist installiert ===&lt;br /&gt;
&lt;br /&gt;
Um zu prüfen, welche Version vom Treiber man aktuell verwendet, kann man im Browser die Konsole öffnen und nach einem page reload diesen Log-Eintrag suchen:&lt;br /&gt;
&lt;br /&gt;
 [io.fhem]: init [V1.10] (address= ...&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel ist es Version 1.10 {{Link2Forum|Topic=35960|Message=283617|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== neue Clients ===&lt;br /&gt;
&lt;br /&gt;
Das Anlegen neuer Clients In smartVISU müssen nicht händisch ergänzt werden. In der config.ini gibt es den parameter auto_add = true|false. Wenn dieser auf true steht, werden neue Clients automatisch in smartVISU angelegt und bekommen eine Kopie der default Einstellungen.&lt;br /&gt;
Im Anschluss können über die Config-Seite die individuellen Einstellungen über die smartVISU-Oberfläche konfiguriert und gespeichert werden (page, design, evtl. calender, etc) {{Link2Forum|Topic=30909|Message=236222|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Dateien ===&lt;br /&gt;
Auch wenn es im Normalfall nicht notwendig ist sollte, kann es manchmal sinnvoll sein, den genauen Speicherort aller Dateien und Konfigurationsdateien zu kennen und entsprechend Debugging-Trigger hinzuzufügen oder Konfigurationen direkt zu korrigieren. &lt;br /&gt;
&lt;br /&gt;
Die folgenden Pfadangaben gehen davon aus, dass das Root-Verzeichnis des eingesetzten Webservers /var/www/html/ ist und smartVISU im Unterordner /var/www/html/sv liegt.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdateien ====&lt;br /&gt;
&lt;br /&gt;
Konfigurationsdatei von smartVISU:&lt;br /&gt;
 /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Ordner und Dateien ====&lt;br /&gt;
Dokumenten Root für smartVISU:&lt;br /&gt;
 /var/www/html/sv/&lt;br /&gt;
&lt;br /&gt;
Treiber:&lt;br /&gt;
 /var/www/html/sv/driver/io-fhem.js&lt;br /&gt;
&lt;br /&gt;
 /var/www/html/sv/driver/io_fhem.min.js &lt;br /&gt;
&lt;br /&gt;
Temp-Ordner:&lt;br /&gt;
 /var/www/html/sv/temp&lt;br /&gt;
&lt;br /&gt;
Template-Ordner für neue &amp;quot;page&amp;quot;:&lt;br /&gt;
 /var/www/html/sv/pages/_template&lt;br /&gt;
&lt;br /&gt;
Eigener Page-Ordner&lt;br /&gt;
 /var/www/html/sv/pages/&amp;lt;eigene page&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=15798</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=15798"/>
		<updated>2016-07-06T02:58:37Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: /* Anwendungsbeispiele */ Verknüpfung zu Fensterkontakt-Artkiel hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:panStamp}}{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 34_panStamp.pm] [http://fhem.de/commandref.html#SWAP 34_SWAP.pm] [http://fhem.de/commandref.html#SWAP_0000002200000003 35_SWAP_0000002200000003.pm] &lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel, gedacht als Eingangsartikel zu dem Thema, beschreibt die Zusammenhänge rund um die Hardwaremodule „panStamp“.&lt;br /&gt;
&lt;br /&gt;
Zur Hardware gibt es [http://www.panstamp.com/ herstellerseitig] eine eigenen Community mit [http://www.panstamp.org/forum/ Forum] und [https://github.com/panStamp/panstamp/wiki Wiki], sowie [https://github.com/panStamp/panstamp/wiki/Downloads Downloads] auf [https://github.com/panStamp Github].&lt;br /&gt;
&lt;br /&gt;
panStamps sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Arduino IDE oder mit dem ino Kommandozeilen Binary programmieren. &lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([https://github.com/panStamp/panstamp/wiki/Simple%20Wireless%20Abstract%20Protocol SWAP]).&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
Grundsätzlich gehören zur Integration in FHEM das [[#FHEM-Module/Device Definition Files|FHEM Modul]] panStamp-Modul, das FHEM Modul SWAP und je nach [[#Anwendungsbeispiele|Anwendung]] ein spezifisches FHEM Modul SWAP_XXXXXXXXXXXXXXXX mit entsprechenden Device Definition Files. &lt;br /&gt;
Details über das Zusammenspiel sind in der [[#Systemübersicht|Systemübersicht]] weiter unten beschrieben.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss ein passender [#panStamp Sketches|Sketch]] (wie eine Firmware) auf die Hardwaremodule geladen werden vergleichbar mit der Firmware für einen CUL. Der Sketch bestimmt die Funktion und ist damit abhängig von der Anwendung. &lt;br /&gt;
Teilweise findet man fertig kompilierte Sketches. Man kann sich aber auch den Sourcecode herunterladen, den eigenen Bedürfnissen anpassen oder gleich einen eigenen Sketch programmieren. Der Sketch wird dann innerhalb einer passenden Entwicklungsumgebung kompilieren und anschießend auf den panStamp hochladen. &lt;br /&gt;
&lt;br /&gt;
Für die Einrichtung (Device Definition) innerhalb von FHEM wird für die Serverseite das IO-Device definiert, für die Seite der Aktuatoren/Sensoren das entsprechende Device.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über alle sich mit dem Thema panStamp befassenden Artikel befindet sich [[:Kategorie:PanStamp|hier]].&lt;br /&gt;
&lt;br /&gt;
== Systemübersicht ==&lt;br /&gt;
[[Datei:Panstamp-Systemoverview.jpg|550px|thumb|panStamp Systemübersicht]]&lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt. Die Kommunikationskette ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
FHEM -&amp;gt; Server Hardware -&amp;gt; USB -&amp;gt; [[#panStick|panStick]] -&amp;gt; panStamp (mit [[#Modem-Sketch|Modem-Sketch]]) -&amp;gt; Funkstrecke (per SWAP-Protokoll) -&amp;gt; panStamp ([[#auf Board abgestimmter Sketch|angepasster Sketch]]) -&amp;gt; Board -&amp;gt; Sensoren/LED-Strip/etc.&lt;br /&gt;
&lt;br /&gt;
(Ein panShield ersetzt &amp;quot;USB -&amp;gt; PanStick&amp;quot; durch &amp;quot;IO&#039;s am Rpi -&amp;gt; panShield&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zum Betrieb werden mindestens 2 panStamp Hardware-Module benötigt, das panStamp FHEM-Modul als IO-Device für FHEM und das FHEM-Modul SWAP zur Integration des Funkprotokolls der panStamps. &lt;br /&gt;
&lt;br /&gt;
Optional kann es noch weitere Module geben als 3. Ebene, die nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sind. Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die SWAP Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen ProductCode steht.&lt;br /&gt;
&lt;br /&gt;
== panStamp Hardware ==&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung in folgenden bezieht sich vornehmlich auf die Hardwaremodule der Generation 1 und 1.1, sowie panStick 1.1, 1.2, die derzeit (Mitte 2016) beim Hersteller nicht mehr erworben werden können. &lt;br /&gt;
&lt;br /&gt;
=== panStick/Shield ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM Server-Hardware und dem Funkprotokoll dient entweder ein panStick mit aufgestecktem panStamp-Hardwaremodul und Modem-Sketch (USB Stick mit Sockel zum Aufstecken eines panStamp) oder ein panShield (mit integriertem panStamp und RTC) an einem Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==== panStick ====&lt;br /&gt;
Der panStick stellt die Verbindung zwischen dem USB-Port auf der einen Seite und dem seriellen Interface der panStamp-Hardware auf der anderen Seite dar. Der panStick wird grundsätzlich für zwei Aufgaben benötigt:&lt;br /&gt;
# Zur Vorbereitung einer panStamp-Hardware für den Betrieb auf einem &#039;&#039;Board&#039;&#039; wird die neue panStamp-Hardware in den panStick gesteckt, um die Programmierung (flashen des Sketch) vorzunehmen.&lt;br /&gt;
# Im &amp;quot;normalen&amp;quot; Betrieb steckt eine panStamp-Hardware auf dem panStick. Der so angebundene panStamp wird mit einem (bei Auslieferung des panStamps vorinstallierten) Modem-Sketch als RF-Modem verwendet und dient so der FHEM Server-Hardware als Interface zu anderen panStamp-Hardwaremodulen, zu denen über eine Funkstrecke mittels des SWAP-Protokolls kommuniziert wird. Der panStick kann auch per USB an einer anderen Serverhardware angebunden werden. Die Kommunikation zu FHEM erfolgt dann z.B. über {{Link2Forum|Topic= 12487|Message=296182l|LinkText=ser2net}} oder [[FHEM2FHEM]] über LAN.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei darauf hingewiesen, dass umgangssprachlich im Forum häufig von panStick die Rede ist, damit aber die Definition des IO-Devices innerhalb von FHEM gemeint ist. Auch kann darunter die Kombination aus panStick, aufgesteckten panStamp und darauf befindlichem Model-Sketch gemeint sein, was gesamt dann als Funk-Interface dient. Ein panStick ohne panStamp-Hardware ist ziemlich nutzlos für die Funktion. Mit panStick ist hier also die reine Hardware als Interface zwischen USB-Port und panStamp gemeint.&lt;br /&gt;
&lt;br /&gt;
==== panShield ====&lt;br /&gt;
Ein panShield übernimmt die gleiche Funktion wie ein panStick mit aufgestecktem panStamp, wird aber direkt an die IOs eines Raspberries angeschlossen. Da auf dem panShield der panStamp fest eingelötet ist, übernimmt dieser in der Regel nur die Funktion des IO-Interfaces wie für den panStick der &amp;quot;normale&amp;quot; Betrieb oben beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der Einfachheit halber wird im Folgenden nicht mehr auf den panShield im Speziellen eingegangen, da es keinen funktionalen Unterschied zur Kombination aus panStick und panStamp gibt.&lt;br /&gt;
&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Die panStamps bilden das zentrale Glied und sind wie eingangs bereits beschrieben Arduino Clones mit einem CC1101 Funkmodul. Mit eine passenden Firmware (Sketch) ausgestattet, stecken sie entweder auf dem panStick oder den entsprechenden Boards/Platinen.&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem Stück Draht in der [https://github.com/panStamp/panstamp/wiki/Antennae richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht, auch nicht auf kurze Distanzen!&lt;br /&gt;
&lt;br /&gt;
Um die Verwirrung der Namensgebung komplett zu machen, wird im Forum häufig vom &amp;quot;panStamps&amp;quot; als Device gesprochen, obwohl es eigentlich als SWAP-Devices definiert wird.&lt;br /&gt;
&lt;br /&gt;
Mit der Einführung der 2. Generation (AVR2, NRG2) hat sich das Footprint der Module stark verändert. Adapterplatinen, um die Module mit neuem Footprint in Hardware mit altem zu integrieren, konnten auf Anfrage bei Daniel im Shop noch geordert werden (Stand Ende 2015; {{Link2Forum|Topic= 12487|Message=296464l|LinkText=Forum}}, {{Link2Forum|Topic= 12487|Message=392818l|LinkText=Forum}}). Langfristig ist davon auszugehen, dass diese nicht dauerhaft werden lieferbar sein. Von der Programmierung unterscheiden sich die Module jedoch nicht.&lt;br /&gt;
&lt;br /&gt;
=== spezifisches &amp;quot;Board&amp;quot; ===&lt;br /&gt;
Im Gegenzug zum panStick, als Hardware-Interface zwischen panStamp und USB-Port des Servers, stellt das spezifische Board das Hardware-Interface zwischen panStamp-Hardware und Input/Outputs (analog/digital) dar. Das &amp;quot;Board&amp;quot; nimmt den panStamp mit dem passenden Sketch auf und setzt die Outputs der panStamp-Hardware auf die Steuerausgänge des Boards um bzw. leitet die Steuereingänge des Boards zur Auswertung an den panStamp Input weiter. Mit panStamp Input und Output sind in diesem Fall die Pins der CPU gemeint.&lt;br /&gt;
Entsprechend Anwendungsfall und Sketch werden die Steuereingänge und Steuerausgänge des panStamps verarbeitet. Z.B. können an ein Board Temperatur-, Feuchtigkeitssensoren oder LED-Strips angeschlossen werden. Der Sketch auf dem panStamp sollte entsprechend der Anwendung auf dem Board angepasst worden sein um nicht nur über die standardmäßig zur Verfügung stehenden Register kommunizieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
Das Board benötigt irgendeine Art von Stromversorgung, um den panStamp zu betreiben. Das kann im Falle eines Sensorboards und entsprechend stromsparend ausgelegtem Sketch eine Batterie sein oder wie im Falle des [[#Anwendungsbeispiele|panStamp RGBWW Board mit DMX und IR]] eine externe Stromversorgung. Speziell beim diesem Board kann die Stromversorgung sogar separat für panStamp und LEDs ausgeführt sein oder insgesamt panStamp und LEDs gemeinsam versorgen.&lt;br /&gt;
&lt;br /&gt;
== panStamp Sketch ==&lt;br /&gt;
&lt;br /&gt;
=== Modem-Sketch ===&lt;br /&gt;
Der Modem-Sketch stellt das Software-Verbindungsglied zwischen panStamp und dem SWAP-Funkprotokoll dar. Das SWAP-Protokoll wird über ein serielles Protokoll dem FHEM-Server zur Verfügung gestellt. Die Verarbeitung des SWAP-Protokolls übernimmt das gleichnamige FHEM-Modul [[#Ebene 2: 34_SWAP.pm|SWAP]]. Auf jedem panStamp (AVR, bei NRG unbekannt) ist im Auslieferungszustand der Modem-Sketch installiert. Der panStick besitzt ebenfalls eine SWAP-ID, also eine fest zugeordnete Adresse. Das ist immer die Adresse &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ein NRG panStamp lässt sich als Modem verwenden, wenn man den Schalter auf dem panStick auf AVR stellt ([http://www.panstamp.org/forum/archive/index.php/thread-4200.html Forum]).&lt;br /&gt;
&lt;br /&gt;
=== auf Board abgestimmter Sketch ===&lt;br /&gt;
Ein panStamp ist auf einem entsprechenden Board installiert und übernimmt dort lokal die Schnittstelle zwischen Funkstrecke und Board. &lt;br /&gt;
Der Sketch stellt dabei die passende &amp;quot;Software&amp;quot; auf dem panStamp-Hardwaremodul. Der Sketch verarbeitet die über das SWAP-Protokoll versandten Nachrichten, wertet diese aus, reagiert entsprechend und setzt die Outputs des Boards. In umgekehrter Richtung wertet er die an den Inputs des Board angelegten Signale aus, verarbeitet diese und schickt sie per SWAP-Protokoll zum panStamp mit Modem-Sketch zurück.&lt;br /&gt;
&lt;br /&gt;
Die Kompatibilität der bestehenden Sketches hängt stark vom Typ des panStamps und von der Entwicklungsumgebung ab. D.h. die neuesten panStamps (NRG) sind mit den neuesten Umgebungen Arduino 1.6x und unabhängig davon mit den alten Sketches meistens nicht kompatibel.&lt;br /&gt;
&lt;br /&gt;
== FHEM-Module/Device Definition Files ==&lt;br /&gt;
Wie eingangs erwähnt erfolgt die Integration in FHEM erfolgt über eine Reihe von Modulen die im Folgenden genauer beschrieben werden. Zusammengefasst gibt es 3 Ebenen mit der Ergänzung eines Konfigurationsfiles in XML-Format. {{Link2Forum|Topic= 13890 |Message=121689 }}&lt;br /&gt;
&lt;br /&gt;
=== Ebene 1: 34_panStamp.pm ===&lt;br /&gt;
Das Modul ist dazu da, Nachrichten aus dem Funknetzwerk, die von einem panStamp mit Modem-Sketch auf einem panStick emfangen werden, FHEM zur Verfügung zu stellen und umgekehrt. Alle eintreffenden SWAP-Pakete werden direkt an FHEM durchgereicht und im SWAP-Modul verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Im moduleigenen [[panStamp (Modul)|Artikel]] ist die Einrichtung des IO-Devices innerhalb von FHEM beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Ebene 2: 34_SWAP.pm ===&lt;br /&gt;
Das Modul implementiert das SWAP Protokoll das zwischen den panStamps gesprochen wird. Darüber werden die auf den entsprechenden Boards/Platinen steckenden panStamp innerhalb von FHEM als TYPE SWAP_&amp;lt;ProductCode&amp;gt; definiert. &lt;br /&gt;
&lt;br /&gt;
Das FHEM-Modul SWAP ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM, und ist in einem eigenen Artikel [[SWAP]] erklärt. Für diese werden hier die allgemeinen Grundfunktionen beschrieben, die bei jedem SWAP-Device funktionieren. Die spezifischen Kommandos und Attribute, die durch die 3. Modulebene in Abhängigkeit des ProductCode zur Verfügung stehen, werden in den Wiki-Artikeln der jeweiligen Module beschrieben.&lt;br /&gt;
&lt;br /&gt;
Um die Verwirrung komplett zu machen, wird im Forum meistens von &amp;quot;panStamps&amp;quot; gesprochen, obwohl es eigentlich SWAP-Devices sind.&lt;br /&gt;
&lt;br /&gt;
=== Ebene 3: SWAP_XXXXXXXXXXXXXXXX.pm ===&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|thumb|rechts|RGB LED Driver Board]]&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein. Mit dieser dritten Modulebene ist es auch für Aktoren wie Schalter/Dimmer/... sehr einfach, diese in FHEM zu integrieren. &lt;br /&gt;
&lt;br /&gt;
Wenn die Namenskonvention SWAP_&amp;lt;ProductCode&amp;gt; für diese Module eingehalten wird, funktioniert auch das autocreate sofern das Modul in FHEM bekannt ist.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen ProductCode steht. Ein Beispiel für das RGB-Board dafür ist das Modul [[#Anwendungsbeispiele|35_SWAP_0000002200000003.pm]].&lt;br /&gt;
&lt;br /&gt;
=== Device Definition Files ===&lt;br /&gt;
Ein XML File was die Ein- und Ausgänge der panStamps beschreibt. Durch diese Datei wird dem FHEM-Modul mitgeteilt wie die Readings zu bennenen sind, welche Werte die Readings haben können und ob die Readings/Register nur ausgelesen werden dürfen, oder auch beschrieben werden können. Im [https://github.com/panStamp/panstamp/wiki/Device-Definition-Files Wiki des Herstellers] ist der Aufbau des Device Definition Files beschrieben. Wenn für einen End Point eine Unit angegeben ist, mit entsprechendem Faktor, dann erstellt das SWAP-Modul automatisch ein passendes userReadings mit der angegebenen Umrechnung.&lt;br /&gt;
&lt;br /&gt;
== panStamps konfigurieren und in Betrieb nehmen ==&lt;br /&gt;
&lt;br /&gt;
Die Inbetriebnahme ist grundsätzlich in die Einrichtung des IO-Devices und die Einrichtung des entfernten Hardwaremoduls (Sensor/Aktuator) zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Auf die Einrichtung des IO-Devices ist [[#Ebene 1: 34_panStamp.pm|hier]] bereits verwiesen.&lt;br /&gt;
&lt;br /&gt;
Für die Einrichtung des entfernten Hardwaremoduls müssen im groben folgende Schritte erfolgen:&lt;br /&gt;
# Vorbereiten einer [[panStamp_Programmierung|Entwicklungsumgebung]], kompilieren und hochladen der Firmware&lt;br /&gt;
# Aufstecken des programmierten panStamps auf das Board&lt;br /&gt;
# Mit Strom versorgen und von Autocreate einrichten lassen&lt;br /&gt;
# Attribute, Namen, Userreading des neuen SWAP-Device nach Bedarf anpassen&lt;br /&gt;
&lt;br /&gt;
=== während der Einrichtung zu berücksichtigen ===&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt [[autocreate]]. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; und grösser &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in Sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für panStamp-Hardware im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald die panStamp-Hardware seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos aus FHEM die Reset-Taste an der panStamp-Hardware zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP-Modul versucht, panStamp-Hardware mit der Default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern. Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
Für batteriebetriebene panStamp-Hardware (genauer: Hardware die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panStamp lib Versionen das Problem das ein Wert von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; in Systemregister &amp;lt;code&amp;gt;0A&amp;lt;/code&amp;gt; zum Überlauf führt und dann ununterbrochen SWAP Nachrichten gesendet werden. Im FHEM Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen Host-Systemen (z.B. FritzBox) nicht, weil der panStamp so schnell sendet, dass FHEM so mit dem Abarbeiten beschäftigt ist, dass es selber nicht zum Senden kommt.&lt;br /&gt;
Zur Abhilfe kann im Sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden. Der Sketch ist dann zu flashen und wenn der Sketch einmal durchgelaufen ist, können diese beiden Zeilen wieder entfernen werden und der panStamp muss noch mal geflasht werden. Ansonsten wird die Adresse bei jedem Start erneut auf &amp;lt;code&amp;gt;5555&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für Kurzentschlossene anhand der Einrichtung für das RGB-Board ===&lt;br /&gt;
&lt;br /&gt;
* Ein panStamp-Hardwaremodul wird in einen panStick gesteckt und der panStick für die Programmierung z.B. unter Windows installiert. Selbstverständlich kann ein panStamp-Hardwaremodul auch über diverse andere Möglichkeiten und unter diversen anderen Betriebssystemen und über diverse andere Schnittstellen programmiert werden.&lt;br /&gt;
* Arduino IDE vorbereiten (libs hinzufügen, Board auswählen, etc.).&lt;br /&gt;
* Ein Sketch wird in der Arduino IDE entsprechend konfiguriert, kompiliert und auf dem panStamp-Hardwaremodul hochgeladen.&lt;br /&gt;
* Das programmierte panStamp-Hardwaremodul, aus dem panStick, in das panStamp_RGBWW_Board stecken.&lt;br /&gt;
* Ein panStamp-Hardwaremodul mit Modem-Sketch in den panStick stecken und an den FHEM-Host stecken.&lt;br /&gt;
* IO-Device unter FHEM einrichten, wenn nicht durch autocreate automatisch geschehen.&lt;br /&gt;
* panStamp_RGBWW_Board mit Strom versorgen und ggf. einmal Reset-Knopf drücken. Dann sollte, falls autocreate aktiv ist, das SWAP-Device automatisch eingerichtet werden.&lt;br /&gt;
* SWAP-Device in FHEM an Gegebenheiten anpassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
Es gibt bereits selbst entwickelte Hardware und Software auf Basis der panStamp Hardware und dem SWAP Protokoll:&lt;br /&gt;
* [[panStamp Umweltsensor|Umweltsensor]]&lt;br /&gt;
* [[Bodenfeuchtesensor]]&lt;br /&gt;
* [[panStamp Innenraumsensor|Innenraumsensor]]&lt;br /&gt;
* [[panStamp RGBWW Board mit DMX und IR|RGBWW Board mit DMX und IR]]&lt;br /&gt;
* Lithium Battery Charging Board für den panStamp AVR2 [https://forum.fhem.de/index.php/topic,12487.msg349328.html#msg349328]&lt;br /&gt;
* [[panStamp FensterkontaktSensor|Fensterkontaktsensor]]&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
&lt;br /&gt;
* Beim Systemstart werden einige Perl-Warnings ins Log geschrieben, die aber die Funktion der Module nicht beeinträchtigen.&lt;br /&gt;
&lt;br /&gt;
* Beim Systemstart wird eine SWAP-Broadcast Nachricht verschickt, die von allen empfangsbereiten panStamps beantwortet wird. Dieses führt bei häufig schnell bei kurz aufeinanderfolgenden Systemstarts zur Überschreitung des Transmit Limits im Rahmen der 1%-Regel für das verwendete Frequenzband.&lt;br /&gt;
&lt;br /&gt;
Weitere Troubleshooting Hinweise finden sich [[SWAP#Trouble Shooting|hier]]&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:panStamp]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15722</id>
		<title>Diskussion:Installation Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15722"/>
		<updated>2016-06-26T17:06:26Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Joshi04!&lt;br /&gt;
Sollte die Weiterleitung nicht besser bestehen bleiben? Der alte Seitentitel könnte bspw. aus dem Forum verlinkt sein. Ohne Weiterleitung landet man dann im &amp;quot;Nichts&amp;quot;.&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 23:26, 25. Jun. 2016 (CEST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo Christian, da hast Du natürlich recht. Ich denke, grundsätzlich müssen wir abwägen zwischen 1. Die Struktur des Wiki ist gut genug, dass auch ein toter Link aus dem Forum keine größere Hürde darstellt und 2. Wir behalten die &amp;quot;Dateileichen&amp;quot; in Form der Weiterleitungen, so dass auch die ältesten Verlinkungen noch funktionieren. &lt;br /&gt;
:MM ist der Forumsbereich noch relativ jung. Derzeit glaube ich ca. 4000 Posts, davon die Hälfte in nur einem Thread, den sich glaube ich niemand mehr durchlesen mag, wenn er bei der Suche im Wiki nach einem der Hauptbegriffe gleich fündig wird. Wenn das ganze mal so eingefahren ist, wie andere Bereiche, würde ich Dir in jedem Falle recht geben. Noch sehe ich allerdings die Gelegenheit, mit relativ wenig &amp;quot;zerbrochenem Geschirr&amp;quot; es in die richtige Richtung zu lenken. Mein Favorit wäre daher derzeit 2.: Zöpfe abschneiden.&lt;br /&gt;
:Das ist aber nur ein Vorschlag und ich kann auch damit leben, den Löscheintrag wieder zu entfernen. Entscheide gerne selbst nach Deiner Überzeugung. &lt;br /&gt;
:Die überarbeiteten Artikel &amp;quot;fronthem Installation&amp;quot;, &amp;quot;smartVISU&amp;quot; und &amp;quot;smartVISU Installation&amp;quot; sind fast fertig, aber erst sinnvoll in Summe Online zu gehen.&lt;br /&gt;
:Schöne Grüße, --[[Benutzer:joshi04|John]] ([[Benutzer Diskussion:joshi04|Diskussion]]) 11:05, 26. Jun. 2016 (CEST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Hallo John&lt;br /&gt;
::Persönlich versuche ich jegliche Links (Seitentitel/Überschriften usw.) immer zu erhalten; auch wenn sie mir überhaupt nicht mehr gefallen (und ich sie teilweise auch noch selbst verbrochen habe ;-) ). Kann Deine Argumente aber nachvollziehen. Zu Deinem Thema selbst (fronthem/smartVISU) bin ich aber eigentlich überfragt, da ich davon keine Ahnung habe. Darum musst Du letztlich selbst entscheiden, was sinnvoll ist oder einer der Wiki-Admins gibt eine Richtung vor.&lt;br /&gt;
::Gruß (und danke für Deine Mitarbeit hier!) --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:45, 26. Jun. 2016 (CEST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:::Hallo Christian,&amp;lt;br /&amp;gt;&lt;br /&gt;
:::hmm, um eine Entscheidung zu treffen, fühle ich mich nicht wichtig genug. Und ich kann auch mit jeder Entscheidung gut leben, ist eine Frage der Philosophie. Zu meinen Argumenten kann ich nichts hinzufügen. Wenn Du nicht entscheiden magst, wäre das etwas für einen Admin, die Richtung vorzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
:::Was mir noch aufgefallen ist, dass auf der Seite der Löschkandidaten die Umleitungsziele und nicht die Umleitungsseiten verlinkt sind. Wenn hier jemand löscht, sollte er aufpassen, nur die Umleitungen zu entfernen und nicht die Artikel selbst. Und vielen Dank für die Umbenennung im Forum.&amp;lt;br /&amp;gt;&lt;br /&gt;
:::Und ich freue mich, wenn ich auch etwas beitragen kann. Bei Programmieren hapert es nämlich. :) &amp;lt;br /&amp;gt;&lt;br /&gt;
:::[[Benutzer:Joshi04|Joshi04]] ([[Benutzer Diskussion:Joshi04|Diskussion]]) 19:04, 26. Jun. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15721</id>
		<title>Diskussion:Installation Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15721"/>
		<updated>2016-06-26T17:04:02Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Joshi04!&lt;br /&gt;
Sollte die Weiterleitung nicht besser bestehen bleiben? Der alte Seitentitel könnte bspw. aus dem Forum verlinkt sein. Ohne Weiterleitung landet man dann im &amp;quot;Nichts&amp;quot;.&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 23:26, 25. Jun. 2016 (CEST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo Christian, da hast Du natürlich recht. Ich denke, grundsätzlich müssen wir abwägen zwischen 1. Die Struktur des Wiki ist gut genug, dass auch ein toter Link aus dem Forum keine größere Hürde darstellt und 2. Wir behalten die &amp;quot;Dateileichen&amp;quot; in Form der Weiterleitungen, so dass auch die ältesten Verlinkungen noch funktionieren. &lt;br /&gt;
:MM ist der Forumsbereich noch relativ jung. Derzeit glaube ich ca. 4000 Posts, davon die Hälfte in nur einem Thread, den sich glaube ich niemand mehr durchlesen mag, wenn er bei der Suche im Wiki nach einem der Hauptbegriffe gleich fündig wird. Wenn das ganze mal so eingefahren ist, wie andere Bereiche, würde ich Dir in jedem Falle recht geben. Noch sehe ich allerdings die Gelegenheit, mit relativ wenig &amp;quot;zerbrochenem Geschirr&amp;quot; es in die richtige Richtung zu lenken. Mein Favorit wäre daher derzeit 2.: Zöpfe abschneiden.&lt;br /&gt;
:Das ist aber nur ein Vorschlag und ich kann auch damit leben, den Löscheintrag wieder zu entfernen. Entscheide gerne selbst nach Deiner Überzeugung. &lt;br /&gt;
:Die überarbeiteten Artikel &amp;quot;fronthem Installation&amp;quot;, &amp;quot;smartVISU&amp;quot; und &amp;quot;smartVISU Installation&amp;quot; sind fast fertig, aber erst sinnvoll in Summe Online zu gehen.&lt;br /&gt;
:Schöne Grüße, --[[Benutzer:joshi04|John]] ([[Benutzer Diskussion:joshi04|Diskussion]]) 11:05, 26. Jun. 2016 (CEST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Hallo John&lt;br /&gt;
::Persönlich versuche ich jegliche Links (Seitentitel/Überschriften usw.) immer zu erhalten; auch wenn sie mir überhaupt nicht mehr gefallen (und ich sie teilweise auch noch selbst verbrochen habe ;-) ). Kann Deine Argumente aber nachvollziehen. Zu Deinem Thema selbst (fronthem/smartVISU) bin ich aber eigentlich überfragt, da ich davon keine Ahnung habe. Darum musst Du letztlich selbst entscheiden, was sinnvoll ist oder einer der Wiki-Admins gibt eine Richtung vor.&lt;br /&gt;
::Gruß (und danke für Deine Mitarbeit hier!) --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:45, 26. Jun. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
Hallo Christian,&amp;lt;br /&amp;gt;&lt;br /&gt;
hmm, um eine Entscheidung zu treffen, fühle ich mich nicht wichtig genug. Und ich kann auch mit jeder Entscheidung gut leben, ist eine Frage der Philosophie. Zu meinen Argumenten kann ich nichts hinzufügen. Wenn Du nicht entscheiden magst, wäre das etwas für einen Admin, die Richtung vorzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Was mir noch aufgefallen ist, dass auf der Seite der Löschkandidaten die Umleitungsziele und nicht die Umleitungsseiten verlinkt sind. Wenn hier jemand löscht, sollte er aufpassen, nur die Umleitungen zu entfernen und nicht die Artikel selbst.&amp;lt;br /&amp;gt;&lt;br /&gt;
Und ich freue mich, wenn ich auch etwas beitragen kann. Bei Programmieren hapert es nämlich. :) &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Benutzer:Joshi04|Joshi04]] ([[Benutzer Diskussion:Joshi04|Diskussion]]) 19:04, 26. Jun. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/Universelle_ZeitSchaltUhr_(UZSU)&amp;diff=15717</id>
		<title>SmartVISU/Universelle ZeitSchaltUhr (UZSU)</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/Universelle_ZeitSchaltUhr_(UZSU)&amp;diff=15717"/>
		<updated>2016-06-26T14:56:22Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU/Universelle ZeitSchaltUhr (UZSU)}}&lt;br /&gt;
Dieser Artikel behandelt die Einrichtung einer universellen Zeitschaltuhr innerhalb des Frontends [[smartVISU]].&lt;br /&gt;
&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU-Seiten wie gewohnt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis, das der Benutzer direkt eintippen kann, z.B. &#039;on&#039; oder &#039;off&#039;)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder Text als Dropdown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oder (für eine einzugebende Ziffer zwischen 0 und 100)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;num&#039;, [0, 100]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (für ein Ergebnis {0,1}, das aber als flip mit &#039;an&#039; und &#039;aus&#039; angezeigt wird)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;bool&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
&lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setreading &amp;lt;device&amp;gt; uzsu {}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erzeugen MUSS.&lt;br /&gt;
&lt;br /&gt;
2. eine Anbindung des UZSU-GAD per UZSU Converter aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem (ist bei aktuellem fronthem alles schon drin)&lt;br /&gt;
&lt;br /&gt;
Dieser Code erzeugt aus den Einstellungen im Widget entsprechende WeekdayTimer in fhem und löscht und erstellt neu bei jeder Änderung in SmartVISU.&lt;br /&gt;
&lt;br /&gt;
4. Die Funktion muss getriggert werden. Dazu ist ein notify nötig, das auf die Veränderung der uzsu Readings reagiert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. GAD Editor Einstellungen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mode:      item&lt;br /&gt;
device:    &amp;lt;DEIN_DEVICE&amp;gt;&lt;br /&gt;
reading:   uzsu&lt;br /&gt;
converter: UZSU&lt;br /&gt;
cmd set:   uzsu&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=15716</id>
		<title>SmartVISU/lichtSzene</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=15716"/>
		<updated>2016-06-26T14:54:18Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU/lichtSzene}}&lt;br /&gt;
&lt;br /&gt;
mit dem folgenden Code lässt sich eine Auswahl für Lichtszenen in smartVisu / fhem erstellen.&lt;br /&gt;
&lt;br /&gt;
So soll es aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smartvisu_Lichtszene_radio_buttons.png|600px|thumb|left|Screenshot Frontend smartVISU]]&lt;br /&gt;
&lt;br /&gt;
Die Radio Buttons sollen dabei in einem Raum folgende Lichtszenen steuern:&lt;br /&gt;
&lt;br /&gt;
* automatische Beleuchtung &lt;br /&gt;
* Fernsehen&lt;br /&gt;
* Arbeitsbeleuchtung &lt;br /&gt;
* Essen&lt;br /&gt;
* Party&lt;br /&gt;
* volle Beleuchtung&lt;br /&gt;
* Weihnachtsbeleuchtung&lt;br /&gt;
* alles Aus&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Funktionalität ist dabei das sich die Lichtszenen umschalten lassen. Wenn eine bereits aktivierte Funktion nochmal betätigt wird entspricht das &amp;quot;aus&amp;quot;. Die Weihnachtsbeleuchtung soll sich unabhängig von den anderen Beleuchtungs Szenen aktivieren oder deaktivieren lassen.&lt;br /&gt;
&lt;br /&gt;
Als Referenz ein Link auf die Online Hilfe von sv zu den hierfür eingesetzten button (typ dual)&lt;br /&gt;
[http://www.smartvisu.de/docu/2.7/index.php?page=basic/widget_basic.dual]&lt;br /&gt;
&lt;br /&gt;
Der Screenshot oben wird mit diesem code in sv erzeugt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cells&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell4 ui-btn-up-a&amp;quot;&amp;gt;Lichtszene&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell6 ui-btn-up-a&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;span data-role=&amp;quot;controlgroup&amp;quot; data-type=&amp;quot;horizontal&amp;quot;&amp;gt;&lt;br /&gt;
			{{ basic.dual(&#039;light.a&#039;, &#039;wz.light.szene.auto&#039;, icon1~&#039;time_automatic.png&#039;, icon0~&#039;time_automatic.png&#039;, &#039;auto&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.b&#039;, &#039;wz.light.szene.tv&#039;, icon1~&#039;it_television.png&#039;, icon0~&#039;it_television.png&#039;, &#039;tv&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.c&#039;, &#039;wz.light.szene.work&#039;, icon1~&#039;light_ceiling_light.png&#039;, icon0~&#039;light_ceiling_light.png&#039;, &#039;work&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.d&#039;, &#039;wz.light.szene.eat&#039;, icon1~&#039;light_dinner_table.png&#039;, icon0~&#039;light_dinner_table.png&#039;, &#039;eat&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.e&#039;, &#039;wz.light.szene.party&#039;, icon1~&#039;light_party.png&#039;, icon0~&#039;light_party.png&#039;, &#039;party&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.f&#039;, &#039;wz.light.szene.full&#039;, icon1~&#039;light_light_dim_100.png&#039;, icon0~&#039;light_light_dim_100.png&#039;, &#039;full&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.g&#039;, &#039;wz.light.szene.xmas&#039;, icon1~&#039;scene_x-mas.png&#039;, icon0~&#039;scene_x-mas.png&#039;, &#039;on&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.h&#039;, &#039;wz.light.szene.off&#039;, icon1~&#039;control_on_off.png&#039;, icon0~&#039;control_on_off.png&#039;, &#039;off&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
		&amp;lt;/span&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird in fhem dazu ein dummy erzeugt über den die Lichtszenen gesteuert werden. Natürlich gäbe es auch alternative Umsetzungen, bspw mit lightscene)&lt;br /&gt;
&lt;br /&gt;
Der dummy (name wz.licht.scene) bekommt diese setlist&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define wz.licht.scene dummy&lt;br /&gt;
attr wz.licht.scene setList off auto tv eat work party full&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:fronthem_gadeditor_lichtszene.png|600px|thumb|right|ronthem Editor]]&lt;br /&gt;
&lt;br /&gt;
Nach einem reload der sv Seite werden die oben definierten GADs vom fronthemDevice in fhem angezeigt (hier mit bereits definierten GAD). Jetzt müssen die buttons (über ihr GAD) mit der fhem Funktionalität verbunden werden. Hier soll jeder button mit seinem Value den dummy setzen. &lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Einstellungen, die für jedes GAD der Button Group durchgefühert werden müssen, wird das erwünschte Verhalten erreicht. Jeder Button der Group setzt das dummy jetzt auf den den seinen &amp;quot;ON-VALUE&amp;quot; (dritt - vorletzter Wert in der definition oben). Ein weiterer Click (oder der rechte Button) setzt alles aus.&lt;br /&gt;
&lt;br /&gt;
Für die Weihanchtsbeleuchtung wird unabhängig ein Steckdose geschaltet, das ist hier nicht dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=15713</id>
		<title>SmartVISU/lichtSzene</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=15713"/>
		<updated>2016-06-26T14:52:34Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite SmartVisu/lichtSzene nach SmartVISU/lichtSzene: Anpassung an die offizielle Schreibweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mit dem folgenden Code lässt sich eine Auswahl für Lichtszenen in smartVisu / fhem erstellen.&lt;br /&gt;
&lt;br /&gt;
So soll es aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smartvisu_Lichtszene_radio_buttons.png|600px|thumb|left|Screenshot Frontend smartVISU]]&lt;br /&gt;
&lt;br /&gt;
Die Radio Buttons sollen dabei in einem Raum folgende Lichtszenen steuern:&lt;br /&gt;
&lt;br /&gt;
* automatische Beleuchtung &lt;br /&gt;
* Fernsehen&lt;br /&gt;
* Arbeitsbeleuchtung &lt;br /&gt;
* Essen&lt;br /&gt;
* Party&lt;br /&gt;
* volle Beleuchtung&lt;br /&gt;
* Weihnachtsbeleuchtung&lt;br /&gt;
* alles Aus&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Funktionalität ist dabei das sich die Lichtszenen umschalten lassen. Wenn eine bereits aktivierte Funktion nochmal betätigt wird entspricht das &amp;quot;aus&amp;quot;. Die Weihnachtsbeleuchtung soll sich unabhängig von den anderen Beleuchtungs Szenen aktivieren oder deaktivieren lassen.&lt;br /&gt;
&lt;br /&gt;
Als Referenz ein Link auf die Online Hilfe von sv zu den hierfür eingesetzten button (typ dual)&lt;br /&gt;
[http://www.smartvisu.de/docu/2.7/index.php?page=basic/widget_basic.dual]&lt;br /&gt;
&lt;br /&gt;
Der Screenshot oben wird mit diesem code in sv erzeugt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cells&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell4 ui-btn-up-a&amp;quot;&amp;gt;Lichtszene&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell6 ui-btn-up-a&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;span data-role=&amp;quot;controlgroup&amp;quot; data-type=&amp;quot;horizontal&amp;quot;&amp;gt;&lt;br /&gt;
			{{ basic.dual(&#039;light.a&#039;, &#039;wz.light.szene.auto&#039;, icon1~&#039;time_automatic.png&#039;, icon0~&#039;time_automatic.png&#039;, &#039;auto&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.b&#039;, &#039;wz.light.szene.tv&#039;, icon1~&#039;it_television.png&#039;, icon0~&#039;it_television.png&#039;, &#039;tv&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.c&#039;, &#039;wz.light.szene.work&#039;, icon1~&#039;light_ceiling_light.png&#039;, icon0~&#039;light_ceiling_light.png&#039;, &#039;work&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.d&#039;, &#039;wz.light.szene.eat&#039;, icon1~&#039;light_dinner_table.png&#039;, icon0~&#039;light_dinner_table.png&#039;, &#039;eat&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.e&#039;, &#039;wz.light.szene.party&#039;, icon1~&#039;light_party.png&#039;, icon0~&#039;light_party.png&#039;, &#039;party&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.f&#039;, &#039;wz.light.szene.full&#039;, icon1~&#039;light_light_dim_100.png&#039;, icon0~&#039;light_light_dim_100.png&#039;, &#039;full&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.g&#039;, &#039;wz.light.szene.xmas&#039;, icon1~&#039;scene_x-mas.png&#039;, icon0~&#039;scene_x-mas.png&#039;, &#039;on&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.h&#039;, &#039;wz.light.szene.off&#039;, icon1~&#039;control_on_off.png&#039;, icon0~&#039;control_on_off.png&#039;, &#039;off&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
		&amp;lt;/span&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird in fhem dazu ein dummy erzeugt über den die Lichtszenen gesteuert werden. Natürlich gäbe es auch alternative Umsetzungen, bspw mit lightscene)&lt;br /&gt;
&lt;br /&gt;
Der dummy (name wz.licht.scene) bekommt diese setlist&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define wz.licht.scene dummy&lt;br /&gt;
attr wz.licht.scene setList off auto tv eat work party full&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:fronthem_gadeditor_lichtszene.png|600px|thumb|right|ronthem Editor]]&lt;br /&gt;
&lt;br /&gt;
Nach einem reload der sv Seite werden die oben definierten GADs vom fronthemDevice in fhem angezeigt (hier mit bereits definierten GAD). Jetzt müssen die buttons (über ihr GAD) mit der fhem Funktionalität verbunden werden. Hier soll jeder button mit seinem Value den dummy setzen. &lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Einstellungen, die für jedes GAD der Button Group durchgefühert werden müssen, wird das erwünschte Verhalten erreicht. Jeder Button der Group setzt das dummy jetzt auf den den seinen &amp;quot;ON-VALUE&amp;quot; (dritt - vorletzter Wert in der definition oben). Ein weiterer Click (oder der rechte Button) setzt alles aus.&lt;br /&gt;
&lt;br /&gt;
Für die Weihanchtsbeleuchtung wird unabhängig ein Steckdose geschaltet, das ist hier nicht dargestellt.&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/IconHighlights_in_Menus&amp;diff=15712</id>
		<title>SmartVISU/IconHighlights in Menus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/IconHighlights_in_Menus&amp;diff=15712"/>
		<updated>2016-06-26T14:51:49Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU/IconHighlights in Menus}}&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Code lassen sich, zum Beispiel innerhalb vom Hauptmenu oder in der Raumübersicht die Icons farbig kennzeichnen.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index.php?page=room_living&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img class=&amp;quot;icon&amp;quot; src=&amp;quot;{{ page == &#039;room_living&#039; ? icon1 : icon0 }}scene_livingroom.png&amp;quot;/&amp;gt;&amp;lt;h3&amp;gt;Wohnzimmer&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/IconHighlights_in_Menus&amp;diff=15709</id>
		<title>SmartVISU/IconHighlights in Menus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/IconHighlights_in_Menus&amp;diff=15709"/>
		<updated>2016-06-26T14:50:24Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite SmartVisu/IconHighlights in Menus nach SmartVISU/IconHighlights in Menus: Anpassung an die offizielle Schreibweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem folgenden Code lassen sich, zum Beispiel innerhalb vom Hauptmenu oder in der Raumübersicht die Icons farbig kennzeichnen.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index.php?page=room_living&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img class=&amp;quot;icon&amp;quot; src=&amp;quot;{{ page == &#039;room_living&#039; ? icon1 : icon0 }}scene_livingroom.png&amp;quot;/&amp;gt;&amp;lt;h3&amp;gt;Wohnzimmer&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=15708</id>
		<title>SmartVISU/fritz!box via TR-064</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=15708"/>
		<updated>2016-06-26T14:49:28Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU/fritz!box via TR-064}}&lt;br /&gt;
&lt;br /&gt;
==fritz!box_via_TR-064==&lt;br /&gt;
Download: https://github.com/herrmannj/smartvisu-widgets/tree/master/phoneservice/lib/phone/service&lt;br /&gt;
&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet wurde es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartVisu angegeben werden.&lt;br /&gt;
Wichtig ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;&amp;quot;Zugriff für Anwendungen zulassen&amp;quot; aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=15704</id>
		<title>SmartVISU/fritz!box via TR-064</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=15704"/>
		<updated>2016-06-26T14:47:38Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite SmartVisu/fritz!box via TR-064 nach SmartVISU/fritz!box via TR-064: Anpassung an die offizielle Schreibweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==fritz!box_via_TR-064==&lt;br /&gt;
Download: https://github.com/herrmannj/smartvisu-widgets/tree/master/phoneservice/lib/phone/service&lt;br /&gt;
&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet wurde es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartVisu angegeben werden.&lt;br /&gt;
Wichtig ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;&amp;quot;Zugriff für Anwendungen zulassen&amp;quot; aktiviert ist.&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=15703</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=15703"/>
		<updated>2016-06-26T14:46:45Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in [[SmartVisu]] mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
* Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator unter einem beliebigen Pfad ablegen, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
* Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service  &lt;br /&gt;
* Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
* Definition der Kalender findet in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
: - wie bisher nur die Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe und Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - eine lokale Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;    &lt;br /&gt;
: Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,     wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
:Bei allen abgelegten Dateien muss auf die Rechte geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden, wie auch bei den Dateien im pages Ordner.&lt;br /&gt;
* Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
: &amp;lt;code&amp;gt;{% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle und Download benötigter Dateien: {{Link2Forum|Topic=35831}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=15699</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=15699"/>
		<updated>2016-06-26T14:44:04Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite SmartVisu/ical nach SmartVISU/ical: Anpassung an die offizielle Schreibweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in [[SmartVisu]] mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
* Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator unter einem beliebigen Pfad ablegen, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
* Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service  &lt;br /&gt;
* Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
* Definition der Kalender findet in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
: - wie bisher nur die Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe und Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - eine lokale Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;    &lt;br /&gt;
: Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,     wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
:Bei allen abgelegten Dateien muss auf die Rechte geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden, wie auch bei den Dateien im pages Ordner.&lt;br /&gt;
* Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
: &amp;lt;code&amp;gt;{% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle und Download benötigter Dateien: {{Link2Forum|Topic=35831}}&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15698</id>
		<title>SmartVISU Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=15698"/>
		<updated>2016-06-26T14:41:11Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Komplette Überarbeitung/neuer Artikel im Rahmen des gesamten Themengebiets fronthem/smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU Installation}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Installation des Web-Frontends [[smartVISU]] und berücksichtigt mehrerer Alternativen für unterschiedliche Web-Server. Zum Betrieb von smartVISU mit FHEM ist die Installation und Konfiguration von [[fronthem]] erforderlich.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Für die Installation ist es immer sinnvoll, von einem auf aktuellem Stand befindlichen System zu starten.&lt;br /&gt;
&lt;br /&gt;
Für das Betriebssystem (Linuxderivat)&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Für FHEM&lt;br /&gt;
 &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in der Eingabezeile&lt;br /&gt;
&lt;br /&gt;
Die Installation lässt sich in 4 Bereiche unterteilen.&lt;br /&gt;
&lt;br /&gt;
== Webserver installieren ==&lt;br /&gt;
&lt;br /&gt;
Welcher Webserver zum Einsatz kommt, ist unerheblich. Im Folgenden sind Beispiele für lighttpd, nginx und Apache2 zu finden. Es wird nur &#039;&#039;&#039;eine&#039;&#039;&#039; Installation benötigt.&lt;br /&gt;
&lt;br /&gt;
=== lighttpd ===&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic= 27291|Message=208880|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Webserver installieren:&lt;br /&gt;
 sudo apt-get install lighttpd&lt;br /&gt;
&lt;br /&gt;
PHP installieren:&lt;br /&gt;
 sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
&lt;br /&gt;
PHP konfigurieren:&lt;br /&gt;
 sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
&lt;br /&gt;
Webserver-Dienst einmal neu starten, damit die Einstellungen wirksam werden:&lt;br /&gt;
 sudo service lighttpd force-reload&lt;br /&gt;
&lt;br /&gt;
Welchseln in des Root-Verzeichnis des Webservers (bei Bedarf, wenn sich das Root-Verzeichnis einer Distribution woanders ist, muss dieser Pfad entsprechend angepasst werden):&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chown www-data:www-data /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen des Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chmod 775 /var/www&lt;br /&gt;
&lt;br /&gt;
=== nginx ===&lt;br /&gt;
==== mit PHP5 ====&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic=30909|Message=273180|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
         listen 80;&lt;br /&gt;
         root /var/www;&lt;br /&gt;
         index index.html index.php;&lt;br /&gt;
         server_name localhost;&lt;br /&gt;
         location / {&lt;br /&gt;
               try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
         }&lt;br /&gt;
         location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
                 include fastcgi_params;&lt;br /&gt;
          }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mit PHP7 ====&lt;br /&gt;
Ubuntu 16.04 läuft standardmäßig mit PHP7. Der Betrieb ist noch nicht zu 100% getestet und daher ohne Garantie.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php7.0-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 default_server;&lt;br /&gt;
        listen [::]:80 default_server;&lt;br /&gt;
        root /var/www/html;&lt;br /&gt;
        index index.php index.html index.htm index.nginx-debian.html;&lt;br /&gt;
&lt;br /&gt;
        server_name _;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                try_files $uri $uri/ =404;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                 fastcgi_pass unix:/run/php/php7.0-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 include fastcgi.conf;&lt;br /&gt;
                 fastcgi_read_timeout 600;&lt;br /&gt;
         }&lt;br /&gt;
         location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {&lt;br /&gt;
                 access_log off; log_not_found off; expires 30d;&lt;br /&gt;
         }&lt;br /&gt;
         location = /robots.txt { access_log off; log_not_found off; }&lt;br /&gt;
         location ~ /\. { deny all; access_log off; log_not_found off; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Apache2 ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem [http://www.meintechblog.de/2015/06/smartvisu-mit-fhem-die-perfekte-visualisierung-teil-1-basics/ Blogeintrag].&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install apache2 php5 libapache2-mod-php5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für das git /cleaninstall: da liegt die erweiterte smartVISU, mit Mandanten und reparierten widgets (wo nötig) - ansonsten aber unverfälscht und nicht mit widgets erweitert.&lt;br /&gt;
&lt;br /&gt;
== smartVISU Installation ==&lt;br /&gt;
&lt;br /&gt;
Für das Klonen (Herunterladen) wird folgendes Paket benötigt:&lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== smartVISU herunterladen ===&lt;br /&gt;
Für die Installation gibt es ein fertig zusammengestelltes Paket aus dem git-Repo von Jörg Herrmanns ([https://github.com/herrmannj/smartvisu-cleaninstall]).&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das Original smartVISU inkl. einigen Anpassungen (fhem-Treiber, Widget-Korrekturen, ...).&lt;br /&gt;
&lt;br /&gt;
Einrichten eines Installationsordners im home-Verzeichnis:&lt;br /&gt;
 mkdir ~/install&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd ~/install&lt;br /&gt;
&lt;br /&gt;
Klonen der Pakets:&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
Dabei wird der Unterordner ./smartvisu-cleaninstall angelegt, in den die Dateien heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
=== smartVISU an richtige Stelle kopieren ===&lt;br /&gt;
Damit der Webserver die Seiten von smartVISU zur Verfügung stellt, müssen diese an die richtige Stelle in Abhängigkeit des verwendeten Webservers und Konfiguration kopiert werden. Ggf. muss die Konfiguration des Webservers entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das neu erstellte Verzeichnis in das Root-Verzeichnis des Webservers kopieren. Dass, wie in diesem Fall angegeben, das Verzeichnis /var/www/ das richtige Verzeichnis ist, kann z.B. dadurch bestätigt werden, dass dort bereits die Default-Seite des Webservers nach der Ersteinrichtung zu finden ist. Bei Bedarf ist das Verzeichnis anzupassen.&lt;br /&gt;
 sudo cp -rp smartvisu-cleaninstall /var/www/smartVISU&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich lässt dich auch ein anderes Installationsverzeichnis wählen. Die folgenden Schritte müssen dann entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Berechtigungen setzen ===&lt;br /&gt;
Später wird zumindest die Konfiguration von dem, was auf dem Endgerät angezeigt werden soll, vom Endgerät aus konfiguriert. Damit dieses auch funktioniert, müssen die Berechtigungen der Seiten entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis von smartVISU&lt;br /&gt;
 chown -R www-data:www-data smartVISU&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen für das Root-Verzeichnis &amp;quot;smartVISU&amp;quot; und alle Unterordner&lt;br /&gt;
 chmod -R 775 smartVISU&lt;br /&gt;
&lt;br /&gt;
=== ggf. Gruppenmitgliedschaft anpassen ===&lt;br /&gt;
Dieser Schritt ist optional und dann hilfreich, wenn man mit einem normalen user z.B. über fileZilla die Dateien austauschen möchte. Da der Schritt zulasten der Sicherheit geht, sollte man ihn nach Abschluss der Konfiguration ggf. wieder rückgängig machen.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der user &amp;quot;pi&amp;quot; zur Gruppe &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; hinzugefügt. Verwendet man einen anderen user, muss dieses selbstverständig angepasst werden.&lt;br /&gt;
 sudo usermod -a -G www-data pi&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen kann man die Gruppenzugehörigkeit über&lt;br /&gt;
 sudo deluser pi www-data&lt;br /&gt;
&lt;br /&gt;
=== Config.ini kopieren ===&lt;br /&gt;
Hierbei handelt es sich um die Hauptdatei mit der das Verhalten von smartVISU gesteuert wird.&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;config.ini.default&amp;quot; muss zu &amp;quot;config.ini&amp;quot; umbenennen oder besser kopiert werden:&lt;br /&gt;
 sudo cp /var/www/smartVISU/config.ini.default /var/www/smartVISU/config.ini&lt;br /&gt;
&lt;br /&gt;
=== Installation überprüfen ===&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartVISU&amp;lt;/code&amp;gt; sollte folgende Seite angezeigt werden: {{Randnotiz|RNTyp=y|RNText=&lt;br /&gt;
Ggf. in der php.ini (error_reporting) die Ausgabe von Warnings abschalten, wenn so was kommt wie &amp;quot;Notice: Undefined index...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Diese Seite wird ggf. nur einmal direkt nach der Ersteinrichtung angezeigt und ist im Folgenden nicht mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
=== nicht offiziell veröffentlichte Version 2.8 ===&lt;br /&gt;
&lt;br /&gt;
Die Installation der nicht offiziell veröffentlichten Version 2.8 von smartVISU basiert auf diesem [https://github.com/ddtlabs/build-smartvisu-cleaninstall Git-Eintrag].&lt;br /&gt;
Die Verwendung geschieht auf eigene Gefahr.&lt;br /&gt;
&lt;br /&gt;
Da man das Softwarepaket für smartVISU direkt von der Quelle herunterläd, müssen die notwendigen Erweiterungen manuell eingefügt werden. Dabei ist der &amp;quot;Treiber&amp;quot; am wichtigsten.&lt;br /&gt;
&lt;br /&gt;
Herunterladen von smartVISU von der Quelle&lt;br /&gt;
 git clone https://github.com/Martin-Gleiss/smartvisu.git&lt;br /&gt;
&lt;br /&gt;
Kopieren in das Webserver Root-Verzeichnis&lt;br /&gt;
 sudo cp -rp smartvisu /var/www/html/sv&lt;br /&gt;
&lt;br /&gt;
Herunterladen der Anpassungen für FHEM&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
&lt;br /&gt;
Kopieren der Erweiterungen&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/readme.txt /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/functions_config.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/includes.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/config.ini.default /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/pages/base/configure.php /var/www/html/sv/pages/base/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.js /var/www/html/sv/driver/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.min.js /var/www/html/sv/driver/&lt;br /&gt;
 sudo cp /var/www/html/sv/config.ini.default /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen (Besitzer und Gruppe)&lt;br /&gt;
 cd /var/www/html&lt;br /&gt;
 sudo chown -R www-data:www-data sv&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen, ist in diesem Beispiel das Root-Verzeichnis des Webserver &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; und das Verzeichnis, in das smartVISU installiert wird &amp;quot;sv&amp;quot;.&lt;br /&gt;
Die smartVISU-Seite wird entsprechend nur mit &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/sv&amp;lt;/code&amp;gt; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
== ein eigenes &amp;quot;Haus&amp;quot; anlegen ==&lt;br /&gt;
Nun gilt es nur noch ein eigenes &amp;quot;Haus&amp;quot; anzulegen, dass man individuell konfiguriert.&lt;br /&gt;
&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
&lt;br /&gt;
Obwohl der folgende Teil bereits zur Einrichtung von fronthem gehört, sei es der Vollständigkeit halber des Beispiels hier trotzdem erwähnt:&lt;br /&gt;
* In FHEM eine fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun sollten die GADs aufgelistet werden. Aus der Liste ein GAD auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung Endgerät ==&lt;br /&gt;
Als letztes greift man vom Endgerät auf die smartVISU-Seiten zu und stellt auf der Config-Seite den Treiber, IP der Servers und den Port ein.&lt;br /&gt;
&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config&amp;lt;/code&amp;gt; bzw. Zahnrad = Config-Menü:&lt;br /&gt;
* Im Feld &amp;quot;Interfaces&amp;quot; für pages das eigenes Haus auswählen (=Ordnername)&lt;br /&gt;
* Der Pagecache sollte zumindest während der Einrichtung ausgeschaltet sein.&lt;br /&gt;
* Im Feld I/O Connection den Treiber Fhem wählen&lt;br /&gt;
* Die IP-Adresse des Servers mit dem Websocket-Server eintragen&lt;br /&gt;
* Port 2121 einstellen&lt;br /&gt;
Nach allen Eintragungen die Konfiguration am unteren Ende der Seite speichern.&lt;br /&gt;
&lt;br /&gt;
Damit die GADs nun im GAD-Editor auf der Detailseite von einem [[fronthem#fronthemEditor|fronthemDevice]] auftauchen, ist es jetzt wichtig, die neue Seite in smartVISU einmal aufzurufen, damit im Hintergrund die GADs übertragen werden.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt, man hat vorher alle notwendigen Schritte für die Installation und Konfiguration von fronthem ausgeführt, kann man nun smartVISU in Verbindung mit FHEM benutzen.&lt;br /&gt;
&lt;br /&gt;
Im Noramlbetrieb stellt man den Pagecache auf &amp;quot;on&amp;quot;- dann werden die templates compiliert gespeichert, was die Geschwindigkeit erhöht {{Link2Forum|Topic=35960|Message=283665|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
&lt;br /&gt;
Wird derzeit nicht unterstützt {{Link2Forum|Topic=43226|Message=352115|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Performanceproblem ===&lt;br /&gt;
&lt;br /&gt;
Während der Entwicklung gab es mehrere Evolutionen, was die Verbindung über den Treiber angeht. Trotzdem hat auch die Platform, auf der smartVISU läuft einen gehörigen Anteil an der Reaktivität der Oberfläche. Darüber hinaus hat selbstredend die Komplexität einer Seite Einfluss auf die Geschwindigkeit.&lt;br /&gt;
Mit einem Webserver auf dem RPi2 scheint es noch potential nach oben zu geben, setzte man eine performantere Platform ein {{Link2Forum|Topic= 48243|Message=402427|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Config-Seite anstatt der individuellen Seite ===&lt;br /&gt;
&lt;br /&gt;
Es wurde vergessen, die Datei config.ini.default nach config.ini zu kopieren {{Link2Forum|Topic= 46501|Message=382426|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsprobleme mit Apache ===&lt;br /&gt;
Anscheinend gab es vereinzelt Zugriffsprobleme auf das smartVISU-Vereichnis, die sich aber mit dieser Erweiterung der Apache-Konfiguration beheben lies {{Link2Forum|Topic=30909|Message=239882|LinkText=(Forum)}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/smartvisu&amp;quot;&amp;gt;&lt;br /&gt;
    Options +Indexes FollowSymLinks +ExecCGI&lt;br /&gt;
    AllowOverride AuthConfig FileInfo&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 404 not found ===&lt;br /&gt;
&lt;br /&gt;
Wird noch nicht einmal die Seite gefunden (404), sind bereits die statischen Seiteninhalte der Webseite nicht richtig konfiguriert. Es muss sichergestellt werden, dass eine Datei im Verzeichnis von smartVISU von einem Endgerät angezeigt werden kann {{Link2Forum|Topic= 46501|Message=49524|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== *.js dateien ===&lt;br /&gt;
&lt;br /&gt;
Sollte jemand Änderungen an den *.js Dateien bearbeiten muss man daran denken, dass in der config.ini ganz unten vereinbart wird welche Version der Datei benutzt wird {{Link2Forum|Topic=30909|Message=252375|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== verschiedene Devices, verschiedene Anzeigen ===&lt;br /&gt;
&lt;br /&gt;
Möchte man sicherstellen, dass auf allen Endgeräten die gleiche page konfiguriert ist, verschiebt man den entsprechenden Teil in der config.ini in den &amp;lt;nowiki&amp;gt;[default]&amp;lt;/nowiki&amp;gt;-Bereich. &lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei eindringlich empfohlen, diese Änderung nur bei nicht laufendem Websocket durchzuführen und in jedem Falle ein Backup der Datei vorzuhalten. Bei Syntaxfehlern wird diese Datei neu erzeugt und überschreibt ohne Nachfrage die Vorversion {{Link2Forum|Topic=46541|Message=383006|LinkText=(Forum)}} {{Link2Forum|Topic=36420|Message=287038|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Welcher Treiber ist installiert ===&lt;br /&gt;
&lt;br /&gt;
Um zu prüfen, welche Version vom Treiber man aktuell verwendet, kann man im Browser die Konsole öffnen und nach einem page reload diesen Log-Eintrag suchen:&lt;br /&gt;
&lt;br /&gt;
 [io.fhem]: init [V1.10] (address= ...&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel ist es Version 1.10 {{Link2Forum|Topic=35960|Message=283617|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== neue Clients ===&lt;br /&gt;
&lt;br /&gt;
Das Anlegen neuer Clients In smartVISU müssen nicht händisch ergänzt werden. In der config.ini gibt es den parameter auto_add = true|false. Wenn dieser auf true steht, werden neue Clients automatisch in smartVISU angelegt und bekommen eine Kopie der default Einstellungen.&lt;br /&gt;
Im Anschluss können über die Config-Seite die individuellen Einstellungen über die smartVISU-Oberfläche konfiguriert und gespeichert werden (page, design, evtl. calender, etc) {{Link2Forum|Topic=30909|Message=236222|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Dateien ===&lt;br /&gt;
Auch wenn es im Normalfall nicht notwendig ist sollte, kann es manchmal sinnvoll sein, den genauen Speicherort aller Dateien und Konfigurationsdateien zu kennen und entsprechend Debugging-Trigger hinzuzufügen oder Konfigurationen direkt zu korrigieren. &lt;br /&gt;
&lt;br /&gt;
Die folgenden Pfadangaben gehen davon aus, dass das Root-Verzeichnis des eingesetzten Webservers /var/www/html/ ist und smartVISU im Unterordner /var/www/html/sv liegt.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdateien ====&lt;br /&gt;
&lt;br /&gt;
Konfigurationsdatei von smartVISU:&lt;br /&gt;
 /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Ordner und Dateien ====&lt;br /&gt;
Dokumenten Root für smartVISU:&lt;br /&gt;
 /var/www/html/sv/&lt;br /&gt;
&lt;br /&gt;
Treiber:&lt;br /&gt;
 /var/www/html/sv/driver/io-fhem.js&lt;br /&gt;
&lt;br /&gt;
 /var/www/html/sv/driver/io_fhem.min.js &lt;br /&gt;
&lt;br /&gt;
Temp-Ordner:&lt;br /&gt;
 /var/www/html/sv/temp&lt;br /&gt;
&lt;br /&gt;
Template-Ordner für neue &amp;quot;page&amp;quot;:&lt;br /&gt;
 /var/www/html/sv/pages/_template&lt;br /&gt;
&lt;br /&gt;
Eigener Page-Ordner&lt;br /&gt;
 /var/www/html/sv/pages/&amp;lt;eigene page&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15697</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15697"/>
		<updated>2016-06-26T14:33:24Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Komplette Überarbeitung im Rahmen des gesamten Themengebiets fronthem/smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt das Web-Frontend smartVISU, dessen Funktionen und Konfiguration.  [http://www.smartvisu.de smartVISU] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient. Für die Anbindung an FHEM ist die Installation und Konfiguration von [[Fronthem]] notwendig, dass das Interface für die Anbindung zur Verfügung stellt. &lt;br /&gt;
&lt;br /&gt;
In einem separaten Artikel wird die [[smartVISU Installation|Installation von smartVISU]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Ein paar Sceenshots, die einen Eindruck des Frontends vermitteln wurden im {{Link2Forum|Topic= 27291|Message=227568|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Bausteine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemuebersicht_fronthem_smartVISU.jpg|550px|thumb|right|Systemübersicht, fronthem/smartVISU]] &lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.&lt;br /&gt;
&lt;br /&gt;
=== Statische Seiten ===&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von smartVISU ist ein Web-Server mit PHP notwendig. Dieser stellt die statischen Inhalte des Frontends zur Verfügung. Die Oberfläche muss den eigenen Bedürfnissen per programmieren der Web-Seite anpassen werden. HTML-, PHP- oder  Javascript-Kenntnisse sind hilfreich, aber nicht zwingend erforderlich.&lt;br /&gt;
Genügend Beispiele sind vorhanden und leicht anpassbar, so dass durch einfaches Zusammenstellen schnell eine individuelle Seite erstellt werden kann. &lt;br /&gt;
&lt;br /&gt;
smartVISU bietet mit seinem Konzept der Widgets eine flexible Möglichkeit der individuellen Erweiterung an. Für viele Anwendungen gibt es bereits Widgets (z.B. Heizung, RGB, Clock, Wetter, etc.), auf die zurückgegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
=== Treiber ===&lt;br /&gt;
&lt;br /&gt;
Was fronthem für FHEM ist, ist der Treiber für smartVISU. Er ist ein Stück Software (js), das in die ausgeliefertern Webseiten per Link eingebettet ist, auf dem Endgerät ausgeführt wird und die Kommunikation zwischen Endgerät und Websocketserver (fronthem) übernimmt und anpasst {{Link2Forum|Topic=53881|Message=466167|LinkText=(Forum)}}. &lt;br /&gt;
&lt;br /&gt;
Ein explizit auf FHEM angepasster Treiber stellt unter anderem die Mandantenfähigkeit (end-device werden seperat betrachtet und beschickt) sicher.&lt;br /&gt;
&lt;br /&gt;
Der Treiber besteht aus den beiden Files [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.js io_fhem.js] und [https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.min.js io_fhem.min.js], die im smartVISU/driver/ Verzeichnis der smartVISU Installation abgelegt sind.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Widgets werden im git-Repository https://github.com/herrmannj/smartvisu-widgets bereitgestellt:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* [[smartVISU/ical|ical]], Kalendereinbindung&lt;br /&gt;
* [[smartVISU/fritz!box_via_TR-064|fritz!box_via_TR-064]], Einbindung Anruferliste, Telefonbuch, etc.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;!-- Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* fritz!box_v6.20&lt;br /&gt;
* [[von Bgewehr]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Für eine eigene neue Seite legt man unter ./pages ein neues Verzeichnis an und kopiert die _template Seiten in dieses Verzeichnis. Dort editiert man die Dateien oder fügt z.B. Dinge ein, die man aus der Doku z. b. auf SmartVISU.de rauskopiert hat. Auch die Beispielhäuser sind sehr hilfreich beim lernen. Die detaillierte Beschreibung der Einrichtung ist wie eingangs erwähnt in einem separaten Artikel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Schaut man sich die Beispielhäuser an, sollte vorher den Treiber auf offline geschaltet werden, weil sich sonst fronthem die Konfiguration der Demohäuser importiert und merkt {{Link2Forum|Topic=30909|Message=235155|LinkText=(Forum)}}. Einen speziellen Editor oder eine grafische Oberfläche für die Programmierung ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
Bei erstellen eigener Widgets, sowie der eigenen Seite sollte man darauf achten, nicht in die bestehenden Dateien direkt einzugreifen, sondern in den eigenen Pages aufzusetzen. So steht auch einem unbeeinträchtigten späteren Update nichts im Wege. Beispielsweise anstelle root.html oder base.html direkt zu verändern, sollte man jeweils angepasste Kopien in das eigene Pages-Verzeichnis legen - diese haben dann Vorrang vor den System Dateien {{Link2Forum|Topic=30909|Message=268592|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Die Template-Engine schaut zuerst dort nach und danach in /base, deswegen sind Anpassungen an (root, base) etc für spezielle Geräte möglich {{Link2Forum|Topic=30909|Message=241148|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Für die eigenen Seiteninhalte sollten entsprechend die Dateinamen &amp;quot;base.html, basic.html, device.html&amp;quot; nicht verwendet werden, da dieses System-Seiten sind.&lt;br /&gt;
&lt;br /&gt;
Möchte man das Design anpassen, verwendet man eine Stylesheet-Datei &amp;quot;visu.css&amp;quot; in seinem Projektordner.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden sind explizite Beispiele beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Codebeispiele ===&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/IconHighlights in Menus|IconHighlights in Menus]]&lt;br /&gt;
* [[smartVISU/lichtSzene|lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Für die folgenden Dinge habe ich bereits eine Idee&lt;br /&gt;
* [[Leselampe]]&lt;br /&gt;
* [[HM-TC Wandthermostat und HM-CC Heizkörperthermostat]]&lt;br /&gt;
* [[Batterieanzeige]]&lt;br /&gt;
* [[Statusanzeige]]&lt;br /&gt;
* [[nur aktiven switch darstellen und schalten]]&lt;br /&gt;
* [[Rolladen]]&lt;br /&gt;
* [[Wind]]&lt;br /&gt;
* [[Fensterkontakt]]&lt;br /&gt;
* [[Basic Switch]]&lt;br /&gt;
* [[HM Dimmer]]&lt;br /&gt;
* [[Reload Button]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://www.smartvisu.de smartVISU Hauptseite von smartVISU]&lt;br /&gt;
&lt;br /&gt;
[http://twig.sensiolabs.org/documentation PHP-Twig Doku]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/archive/p/smartvisu/wikis Google-Archiv smartVISU]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15692</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15692"/>
		<updated>2016-06-26T14:23:31Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite SmartVisu nach SmartVISU: Anpassung an die offizielle Schreibweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SmartVisu]] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Codebeispiele:==&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Widgets werden im git-Repository https://github.com/herrmannj/smartvisu-widgets bereitgestellt:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* [[SmartVisu/ical|ical]] &lt;br /&gt;
* [[SmartVisu/fritz!box_via_TR-064|fritz!box_via_TR-064]] &lt;br /&gt;
* fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=15691</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=15691"/>
		<updated>2016-06-26T14:22:41Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Komplette Überarbeitung im Rahmen des gesamten Themengebiets fronthem/smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:fronthem Installation}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit der Installation von &amp;quot;fronthem&amp;quot;. Es stellt ein Interface zur Verfügung, um ein Webfrontends wie z.B. [[smartVISU]] an FHEM anzubinden. Die Konfiguration und das Interface selbst sind im [[fronthem|Hauptartikel von fronthem]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorraussetzungen schaffen ==&lt;br /&gt;
&lt;br /&gt;
In Abhängigkeit der verwendeten Distribution gibt es mehrere Möglichkeiten, die einzelnen Pakete zu installieren {{Link2Forum|Topic=38639|Message=309479|LinkText=(Forum)}}. Für einige Installationsschritte ist das Paket build-essential, dass über diesen Befehlt installiert werden kann. Sonst können die make&#039;s während der folgenden Schritte nicht ausgeführt werden {{Link2Forum|Topic=30909|Message=235986|LinkText=(Forum)}}.&lt;br /&gt;
 sudo apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
=== cpanmin ===&lt;br /&gt;
 curl -L https://cpanmin.us | perl - --sudo App::cpanminus&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install cpanminus&lt;br /&gt;
&lt;br /&gt;
=== WebSocket ===&lt;br /&gt;
&lt;br /&gt;
 sudo cpanm Net::WebSocket::Server&lt;br /&gt;
oder {{Link2Forum|Topic=47120|Message=388577|LinkText=(Forum)}}&lt;br /&gt;
 sudo cpan install Net::WebSocket::Server&lt;br /&gt;
&lt;br /&gt;
=== JSON ===&lt;br /&gt;
&lt;br /&gt;
 sudo cpanm JSON&lt;br /&gt;
oder&lt;br /&gt;
 sudo cpan install JSON&lt;br /&gt;
oder falls es Probleme mit CPAN und Debian z.B. auf dem RPi gibt, kann man JSON auch über die normale Paketverwaltung installieren {{Link2Forum|Topic=30909|Message=237576|LinkText=(Forum)}}:&lt;br /&gt;
 sudo apt-get install libjson-perl&lt;br /&gt;
&lt;br /&gt;
== Module herunterladen ==&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Befehl kann man fronthem installieren / updaten (in Eingabezeile von FHEM eingeben):&lt;br /&gt;
 update force https://raw.githubusercontent.com/herrmannj/fronthem/master/controls_fronthem.txt&lt;br /&gt;
&lt;br /&gt;
Durch die Option &amp;lt;code&amp;gt;force&amp;lt;/code&amp;gt; werden bei erneutem Aufruf auch erneut alle Dateien heruntergeladen und das Update so erzwungen.&lt;br /&gt;
&lt;br /&gt;
== Ersteinrichtung innerhalb von FHEM ==&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von fronthem in FHEM (Eingabe in der Fhem Web Kommandozeile):&lt;br /&gt;
 define &amp;lt;Name Webservice&amp;gt; fronthem&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;Name Endgerät&amp;gt; fronthemDevice &amp;lt;IP Endgerät&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define meinfronthem fronthem&lt;br /&gt;
&lt;br /&gt;
 define meiniphone fronthemDevice 192.168.178.25&lt;br /&gt;
&lt;br /&gt;
Näheres zur Einrichtung und Konfiguration innerhalb von FHEM findet sich im [[fronthem|Hauptartikel]] von fronthem.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
=== Fehler bei Installation von WebSocket ===&lt;br /&gt;
&lt;br /&gt;
Zum einen ist für die Installation das Paket build-essential notwendig, dass z.B. über folgenden Befehl installiert werden kann:&lt;br /&gt;
 sudo apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss die Konfiguration des Netzwerk-Interfaces korrekt und vollständig sein {{Link2Forum|Topic=52694|Message=445277|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Port 2121 belegt ===&lt;br /&gt;
&lt;br /&gt;
Ist der Port 2121 bereits durch einen anderen Dienst belegt, z.B. ein OWS Server, gibt es beim Versuch den Websocketserver zu starten eine Fehlermeldung {{Link2Forum|Topic=38639|Message=313193|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15690</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15690"/>
		<updated>2016-06-26T14:18:27Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kapitel: Dateien/Ordner hinzugefügt; Link zum Forumsbereich aktualisiert; Kleinigkeiten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:fronthem}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=fronthem/smartVISU&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sind. Die [[fronthem Installation|Installation von fronthem]] ist in einem separater Artikel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen. Im Hauptartikel von smartVISU ist ebenfalls eine Systemübersicht der zusammenhänge gezeigt. &lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fromthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct|Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect|NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay|NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff|OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined|RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp|ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute|Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger|Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite weiß fronthem nicht, welche GADs in smartVISU verwendet werden. Jedes GAD das einmal sichtbar war, wird von fronthem gespeichert und aufgelistet, bis man es explizizt in fronthem löscht. ({{Link2Forum|Topic= 43226|Message=352115|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese für jedes Endgerät unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== allgemeines Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Fehlermeldungen schauen&lt;br /&gt;
* In der Datei fronthem.err im Verzeichnis /opt/fhem nach Fehlermeldungen schauen {{Link2Forum|Topic=36858|Message=291272|LinkText=(Forum)}}&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
* Den Log des Webservers kontrollieren&lt;br /&gt;
* Prüfen, ob der WebSocket läuft&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=(Forum)}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=(Forum)}}, {{Link2Forum|Topic= 52624|Message=444004|LinkText=(Forum)}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=(Forum)}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird Websocket erst ab Android 4.4 einwandfrei unterstützt {{Link2Forum|Topic= 39587|Message=318219|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls das iPad 1G wird nicht mehr unterstützt {{Link2Forum|Topic= 46737|Message=384727|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
=== dummy zum Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Hat man Probleme ein FHEM zur Funktion zu überreden, kann man stattdessen ein Dummy einrichten. Anhand des Dummy lässt sich leicht sehen, was genau gesetzt wird {{Link2Forum|Topic=35959|Message=289046|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Logmeldungen ===&lt;br /&gt;
&lt;br /&gt;
Da die Module noch inoffiziell sind, hat sich ein wenig debug code ins git geschlichen.&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile Code muss in den beiden Dateien aus kommentiert werden (# am Anfang der Zeile) {{Link2Forum|Topic= 36407|Message=287499|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
 Log3 ($hash, 1, &amp;quot;in $e&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
: Zeile 325 in 31_fronthemDevice.pm&lt;br /&gt;
: Zeile 154 in 01_fronthem.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird {{Link2Forum|Topic= 30909|Message=236073|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem {{Link2Forum|Topic= 30909|Message=269984|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist bekannt, dass ein manuelles Editieren der fhem.cfg ebenfalls dazu führen kann, dass die Liste leer bleibt {{Link2Forum|Topic=43796|Message=357097|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== alte GADs löschen ===&lt;br /&gt;
&lt;br /&gt;
Hat man einmal aus versehen einen Demoraum ausgewählt und vergessen den Treiber auf Offline zu stellen, füllt sich der GAD-Editor mit allen GADs aus dem Demoraum. Um diese wieder zu löschen gibt es entweder den Weg über den GAD-Editor (gad-Editor -&amp;gt; gad anklicken -&amp;gt; delete) oder die Möglichkeit direkt die fhserver.fronthem.cfg zu editieren {{Link2Forum|Topic=47281|Message=390051|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich unter ./fhem/www/fronthem/server/&amp;lt;devicename&amp;gt; {{Link2Forum|Topic=46214|Message=379959|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände {{Link2Forum|Topic= 30909|Message=281398|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
Für ein Script, dass variable fronthemDevices anlegt, sei auf diesen {{Link2Forum|Topic= 50328|Message=420580|LinkText=Forumsbeitrag}} verwiesen.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Artikel, der sich mit dem Thema befasst, ist dieser {{Link2Forum|Topic= 50019|Message=417592|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Dateien ===&lt;br /&gt;
Auch wenn es im Normalfall nicht notwendig ist sollte, kann es manchmal sinnvoll sein, den genauen Speicherort der Module und Konfigurationsdateien zu kennen und entsprechend Debugging-Trigger hinzuzufügen oder Konfigurationen direkt zu korrigieren. Die folgenden Pfadangaben gehen davon aus, dass FHEM im Verzeichnis /opt/fhem/ installiert ist.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsdateien ====&lt;br /&gt;
&lt;br /&gt;
Speicherort für Verbindung zwischen GADs und FHEM-Devices:&lt;br /&gt;
 /opt/fhem/www/fronthem/server/fronthem/fhservr.&amp;lt;device&amp;gt;.cfg&lt;br /&gt;
&lt;br /&gt;
Speicherort für Berechtigungen pro Endgerät:&lt;br /&gt;
 /opt/fhem/www/fronthem/clients/&amp;lt;Endgerät-Device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logdatei des fronthem-Devices:&lt;br /&gt;
 /opt/fhem/fronthem.err&lt;br /&gt;
&lt;br /&gt;
==== Moduldateien ====&lt;br /&gt;
Modul für fronthem und die Verwaltung des Websocketservers:&lt;br /&gt;
 /opt/fhem/FHEM/01_fronthem.pm&lt;br /&gt;
&lt;br /&gt;
Modul für die fronthemDevices (Einbindung Endgeräte):&lt;br /&gt;
 /opt/fhem/FHEM/31_fronthemDevice.pm&lt;br /&gt;
&lt;br /&gt;
Modul mit den standardmäßigen Konvertern:&lt;br /&gt;
 /opt/fhem/FHEM/fhconverter.pm&lt;br /&gt;
&lt;br /&gt;
Optionales Modul für eigene Konverter:&lt;br /&gt;
 /opt/fhem/FHEM/99_fronthemUtils.pm&lt;br /&gt;
&lt;br /&gt;
Datei, die den GAD-Editor enthält:&lt;br /&gt;
 /opt/fhem/www/frontend/pgm2/fronthemEditor.js&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=30909|Message=257681|LinkText=Addon-Treiber}} um eine weitere Steuerung Daten in SV zu visualisieren .&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Systemuebersicht_fronthem_smartVISU.jpg&amp;diff=15688</id>
		<title>Datei:Systemuebersicht fronthem smartVISU.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Systemuebersicht_fronthem_smartVISU.jpg&amp;diff=15688"/>
		<updated>2016-06-26T13:48:41Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Systemübersicht der derzeitigen Zusammenhänge zwischen fronthem und smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Systemübersicht der derzeitigen Zusammenhänge zwischen fronthem und smartVISU&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15687</id>
		<title>Diskussion:Installation Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Installation_Fronthem&amp;diff=15687"/>
		<updated>2016-06-26T09:08:47Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Joshi04!&lt;br /&gt;
Sollte die Weiterleitung nicht besser bestehen bleiben? Der alte Seitentitel könnte aus bspw. aus dem Forum verlinkt sein. Ohne Weiterleitung landet man dann im &amp;quot;Nichts&amp;quot;.&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 23:26, 25. Jun. 2016 (CEST)&lt;br /&gt;
:Hallo Christian, da hast Du natürlich recht. Ich denke, grundsätzlich müssen wir abwägen zwischen 1. Die Struktur des Wiki ist gut genug, dass auch ein toter Link aus dem Forum keine größere Hürde darstellt und 2. Wir behalten die &amp;quot;Dateileichen&amp;quot; in Form der Weiterleitungen, so dass auch die ältesten Verlinkungen noch funktionieren. &lt;br /&gt;
:MM ist der Forumsbereich noch relativ jung. Derzeit glaube ich ca. 4000 Posts, davon die Hälfte in nur einem Thread, den sich glaube ich niemand mehr durchlesen mag, wenn er bei der Suche im Wiki nach einem der Hauptbegriffe gleich fündig wird. Wenn das ganze mal so eingefahren ist, wie andere Bereiche, würde ich Dir in jedem Falle recht geben. Noch sehe ich allerdings die Gelegenheit, mit relativ wenig &amp;quot;zerbrochenem Geschirr&amp;quot; es in die richtige Richtung zu lenken. Mein Favorit wäre daher derzeit 2.: Zöpfe abschneiden.&lt;br /&gt;
:Das ist aber nur ein Vorschlag und ich kann auch damit leben, den Löscheintrag wieder zu entfernen. Entscheide gerne selbst nach Deiner Überzeugung. &lt;br /&gt;
:Die überarbeiteten Artikel &amp;quot;fronthem Installation&amp;quot;, &amp;quot;smartVISU&amp;quot; und &amp;quot;smartVISU Installation&amp;quot; sind fast fertig, aber erst sinnvoll in Summe Online zu gehen.&lt;br /&gt;
:Schöne Grüße, --[[Benutzer:joshi04|John]] ([[Benutzer Diskussion:joshi04|Diskussion]]) 11:05, 26. Jun. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=15678</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=15678"/>
		<updated>2016-06-25T16:34:12Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Joshi04 verschob die Seite Installation Fronthem nach Fronthem Installation: Zur Optimierung der Auflistungsreihenfolge auf der Kategorieseite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Einen Überblick über Fronthem findet man auf der Seite zu [[Fronthem]]&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
=== Fhem ===&lt;br /&gt;
Ein lauffähiges Fhem mit einem aktuellen Update sollte installiert sein.&lt;br /&gt;
&lt;br /&gt;
=== Webserver ===&lt;br /&gt;
Für smartVISU muss ein Webserver (z.B. lighttpd oder Apache oder nginx) installiert sein.&lt;br /&gt;
&lt;br /&gt;
==== lighttpd ====&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install lighttpd&lt;br /&gt;
    sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
    cd /var/www&lt;br /&gt;
    sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
    sudo service lighttpd force-reload&lt;br /&gt;
    sudo chown www-data:www-data /var/www&lt;br /&gt;
    sudo chmod 775 /var/www&lt;br /&gt;
    sudo usermod -a -G www-data pi&lt;br /&gt;
    sudo usermod -a -G www-data bananapi&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 $ apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für nginx kann man unter&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
vornehmen.&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
 server {&lt;br /&gt;
 listen 80;&lt;br /&gt;
 root /var/www;&lt;br /&gt;
 index index.html index.php;&lt;br /&gt;
 server_name localhost;&lt;br /&gt;
 location / {&lt;br /&gt;
 try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
 }&lt;br /&gt;
 location ~ \.php$ {&lt;br /&gt;
 try_files $uri =404;&lt;br /&gt;
 fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
 fastcgi_index index.php;&lt;br /&gt;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
 include fastcgi_params;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Installation smartVISU ==&lt;br /&gt;
Die Installation stammt aus Jörg Herrmanns git-Repo: https://github.com/herrmannj/smartvisu-cleaninstall&lt;br /&gt;
&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 $ apt-get install git&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das original smartVISU inkl. diverser Anpassungen (fhem-Treiber, ...).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
 $ mkdir ~/install&lt;br /&gt;
 $ cd ~/install&lt;br /&gt;
 $ git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Installation:&#039;&#039;&#039;&lt;br /&gt;
 $ sudo cp -rp smartvisu-cleaninstall /var/www/smartvisu&lt;br /&gt;
 $ cd /var/www&lt;br /&gt;
 $ sudo chown -R www-data:www-data smartvisu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation überprüfen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite http://&amp;lt;IP-Adresse&amp;gt;/smartvisu sollte folgende Seite angezeigt werden: {{Randnotiz|RNTyp=y|RNText=Wenn ihr hier einen Fehler erhaltet und euch nicht die SmartVisu Seite angezeigt wird müsst ihr die Datei &amp;quot;config.ini.default&amp;quot; zu &amp;quot;config.ini&amp;quot; umbenennen, am besten erstellt ihr eine neue Kopie wie folgt:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo cp /var/www/smartvisu/config.ini.default /var/www/smartvisu/config.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
Ebenso bitte ggf. in der php.ini (error_reporting) die Ausgabe von Warnings abschalten, wenn so was kommt wie &amp;quot;Notice: Undefined index...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
== Installation Fronthem ==&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 curl -L https://cpanmin.us | perl - --sudo App::cpanminus&lt;br /&gt;
 sudo cpanm Net::WebSocket::Server&lt;br /&gt;
 sudo cpanm JSON&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Befehl kann man Fronthem installieren / updaten:&lt;br /&gt;
 update force https://raw.githubusercontent.com/herrmannj/fronthem/master/controls_fronthem.txt&lt;br /&gt;
&lt;br /&gt;
Konfiguration von Fronthem in Fhem  (Eingabe in der Fhem Web Kommandozeile):&lt;br /&gt;
 define &amp;lt;Name Webservice&amp;gt; fronthem&lt;br /&gt;
 define &amp;lt;Name Endgerät&amp;gt; fronthemDevice &amp;lt;IP Endgerät&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define meinfronthem fronthem&lt;br /&gt;
 define meiniphone fronthemDevice 192.168.178.25&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Save&amp;quot; nicht vergessen!&lt;br /&gt;
Näheres dazu findet man auch unter http://www.fhemwiki.de/wiki/Fronthem#Basic_Syntax&lt;br /&gt;
&lt;br /&gt;
== Eigenes smartVISU Projekt anlegen ==&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
* smartVISU aufrufen, Zahnrad = configmenü, eigenes Haus auswählen (Ordnername!) und als Treiber DOMOTIGA (oder auch FHEM) mit Port 2121 mit der IP des FHEM-Servers&lt;br /&gt;
* speichern der Config nicht vergessen (Save ganz unten!)&lt;br /&gt;
* jetzt ist es wichtig, dass ihr einmal eure Seiten in Smartvisu aufruft damit im Hintergrund die GADs erstellt werden.&lt;br /&gt;
* In Fhem eure fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun seht ihr eure GADs, aus der gadliste ein gad auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Verbindung smartVISU mit Fhem ==&lt;br /&gt;
=== Konfiguration smartVISU-Treiber ===&lt;br /&gt;
==== Interface ====&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==== I/O-Connection ====&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln (http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config)&lt;br /&gt;
&lt;br /&gt;
Driver: &#039;&#039;Fhem&#039;&#039;  (wird in Github von hermmanj bereitgestellt, falls smartvisu nicht von dort bezogen wird)&lt;br /&gt;
&lt;br /&gt;
Adresse: &#039;&#039;&amp;lt;IP-Adresse Fhem-Server&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Port: &#039;&#039;2121&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15677</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15677"/>
		<updated>2016-06-25T16:32:36Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Groß/Kleinschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sind. Die [[fronthem Installation|Installation von fronthem]] ist in einem separater Artikel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fronthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
Die Datei 01_fronthem.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
Die Datei 31_fronthemDevice.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei fhconverter.pm, die die oben genannten Converter enthält, liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB. Er wird durch die Datei fronthemEditor.js realisiert, die im Ordner .../fhem/www/frontend/pgm2/ abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite weiß fronthem nicht, welche GADs in smartVISU verwendet werden. Jedes GAD das einmal sichtbar war, wird von fronthem gespeichert und aufgelistet, bis man es explizizt in fronthem löscht. ({{Link2Forum|Topic= 43226|Message=352115|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese für jedes Endgerät unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== allgemeines Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Errors schauen&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
* Den Log des Webservers kontrollieren&lt;br /&gt;
* Prüfen, ob der WebSocket läuft&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=Forum}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=Forum}}, {{Link2Forum|Topic= 52624|Message=444004|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird Websocket erst ab Android 4.4 einwandfrei unterstützt {{Link2Forum|Topic= 39587|Message=318219|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls das iPad 1G wird nicht mehr unterstützt {{Link2Forum|Topic= 46737|Message=384727|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
=== Logmeldungen ===&lt;br /&gt;
&lt;br /&gt;
Da die Module noch inoffiziell sind, hat sich ein wenig debug code ins git geschlichen.&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile Code muss in den beiden Dateien aus kommentiert werden (# am Anfang der Zeile).&lt;br /&gt;
&lt;br /&gt;
 Log3 ($hash, 1, &amp;quot;in $e&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
: Zeile 325 in 31_fronthemDevice.pm&lt;br /&gt;
: Zeile 154 in 01_fronthem.pm&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic= 36407|Message=287499|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird. {{Link2Forum|Topic= 30909|Message=236073|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem.&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=269984|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist bekannt, dass ein manuelles Editieren der fhem.cfg ebenfalls dazu führen kann, dass die Liste leer bleibt.&lt;br /&gt;
{{Link2Forum|Topic=43796|Message=357097|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== alte GADs löschen ===&lt;br /&gt;
&lt;br /&gt;
Hat man einmal aus versehen einen Demoraum ausgewählt und vergessen den Treiber auf Offline zu stellen, füllt sich der GAD-Editor mit allen GADs aus dem Demoraum. Um diese wieder zu löschen gibt es entweder den Weg über den GAD-Editor (gad-Editor -&amp;gt; gad anklicken -&amp;gt; delete) oder die Möglichkeit direkt die fhserver.fronthem.cfg zu editieren. {{Link2Forum|Topic=47281|Message=390051|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich unter ./fhem/www/fronthem/server/&amp;lt;devicename&amp;gt;. {{Link2Forum|Topic=46214|Message=379959|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände. {{Link2Forum|Topic= 30909|Message=281398|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Für ein Script, dass variable fronthemDevices anlegt, sei auf diesen {{Link2Forum|Topic= 50328|Message=420580|LinkText=Forumsbeitrag}} verwiesen.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Artikel, der sich mit dem Thema befasst, ist dieser {{Link2Forum|Topic= 50019|Message=417592|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=30909|Message=257681|LinkText=Addon-Treiber}} um eine weitere Steuerung Daten in SV zu visualisieren .&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15676</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15676"/>
		<updated>2016-06-25T16:25:23Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Link angepasst zur Verschiebung von &amp;quot;Installation fronthem&amp;quot; nach &amp;quot;fronthem Installation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sind. Die [[Fronthem Installation|Installation von fronthem]] ist in einem separater Artikel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fromthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
Die Datei 01_fronthem.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
Die Datei 31_fronthemDevice.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei fhconverter.pm, die die oben genannten Converter enthält, liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB. Er wird durch die Datei fronthemEditor.js realisiert, die im Ordner .../fhem/www/frontend/pgm2/ abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite weiß fronthem nicht, welche GADs in smartVISU verwendet werden. Jedes GAD das einmal sichtbar war, wird von fronthem gespeichert und aufgelistet, bis man es explizizt in fronthem löscht. ({{Link2Forum|Topic= 43226|Message=352115|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese für jedes Endgerät unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== allgemeines Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Errors schauen&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
* Den Log des Webservers kontrollieren&lt;br /&gt;
* Prüfen, ob der WebSocket läuft&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=Forum}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=Forum}}, {{Link2Forum|Topic= 52624|Message=444004|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird Websocket erst ab Android 4.4 einwandfrei unterstützt {{Link2Forum|Topic= 39587|Message=318219|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls das iPad 1G wird nicht mehr unterstützt {{Link2Forum|Topic= 46737|Message=384727|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
=== Logmeldungen ===&lt;br /&gt;
&lt;br /&gt;
Da die Module noch inoffiziell sind, hat sich ein wenig debug code ins git geschlichen.&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile Code muss in den beiden Dateien aus kommentiert werden (# am Anfang der Zeile).&lt;br /&gt;
&lt;br /&gt;
 Log3 ($hash, 1, &amp;quot;in $e&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
: Zeile 325 in 31_fronthemDevice.pm&lt;br /&gt;
: Zeile 154 in 01_fronthem.pm&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic= 36407|Message=287499|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird. {{Link2Forum|Topic= 30909|Message=236073|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem.&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=269984|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist bekannt, dass ein manuelles Editieren der fhem.cfg ebenfalls dazu führen kann, dass die Liste leer bleibt.&lt;br /&gt;
{{Link2Forum|Topic=43796|Message=357097|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== alte GADs löschen ===&lt;br /&gt;
&lt;br /&gt;
Hat man einmal aus versehen einen Demoraum ausgewählt und vergessen den Treiber auf Offline zu stellen, füllt sich der GAD-Editor mit allen GADs aus dem Demoraum. Um diese wieder zu löschen gibt es entweder den Weg über den GAD-Editor (gad-Editor -&amp;gt; gad anklicken -&amp;gt; delete) oder die Möglichkeit direkt die fhserver.fronthem.cfg zu editieren. {{Link2Forum|Topic=47281|Message=390051|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich unter ./fhem/www/fronthem/server/&amp;lt;devicename&amp;gt;. {{Link2Forum|Topic=46214|Message=379959|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände. {{Link2Forum|Topic= 30909|Message=281398|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Für ein Script, dass variable fronthemDevices anlegt, sei auf diesen {{Link2Forum|Topic= 50328|Message=420580|LinkText=Forumsbeitrag}} verwiesen.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Artikel, der sich mit dem Thema befasst, ist dieser {{Link2Forum|Topic= 50019|Message=417592|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=30909|Message=257681|LinkText=Addon-Treiber}} um eine weitere Steuerung Daten in SV zu visualisieren .&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Kategorie:Fronthem/smartVISU&amp;diff=15675</id>
		<title>Kategorie:Fronthem/smartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Kategorie:Fronthem/smartVISU&amp;diff=15675"/>
		<updated>2016-06-24T20:37:48Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Neue Kategorie fronthem/smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Bezeichnung ist die Kombination aus dem Interface mit Namen &amp;quot;fronthem&amp;quot; und dem Web-Frontend &amp;quot;smartVISU&amp;quot;. Für einen Betrieb muss zum einen das Interface fronthem installiert und konfiguriert werden, als auch das Web-Frontend installiert und konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Konkrete Beispiele sind für bestimmt Anwendungen unter smartVISU beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15674</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15674"/>
		<updated>2016-06-24T20:34:46Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Kategorie fronthem/smartVISU eingeführt; weitere Kleinigkeiten aus dem Forum hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sind. Die [[Installation Fronthem|Installation von fronthem]] ist in einem separater Artikel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fromthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
Die Datei 01_fronthem.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
Die Datei 31_fronthemDevice.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei fhconverter.pm, die die oben genannten Converter enthält, liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB. Er wird durch die Datei fronthemEditor.js realisiert, die im Ordner .../fhem/www/frontend/pgm2/ abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite weiß fronthem nicht, welche GADs in smartVISU verwendet werden. Jedes GAD das einmal sichtbar war, wird von fronthem gespeichert und aufgelistet, bis man es explizizt in fronthem löscht. ({{Link2Forum|Topic= 43226|Message=352115|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese für jedes Endgerät unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== allgemeines Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Errors schauen&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
* Den Log des Webservers kontrollieren&lt;br /&gt;
* Prüfen, ob der WebSocket läuft&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=Forum}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=Forum}}, {{Link2Forum|Topic= 52624|Message=444004|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird Websocket erst ab Android 4.4 einwandfrei unterstützt {{Link2Forum|Topic= 39587|Message=318219|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls das iPad 1G wird nicht mehr unterstützt {{Link2Forum|Topic= 46737|Message=384727|LinkText=Forum}}.&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
=== Logmeldungen ===&lt;br /&gt;
&lt;br /&gt;
Da die Module noch inoffiziell sind, hat sich ein wenig debug code ins git geschlichen.&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile Code muss in den beiden Dateien aus kommentiert werden (# am Anfang der Zeile).&lt;br /&gt;
&lt;br /&gt;
 Log3 ($hash, 1, &amp;quot;in $e&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
: Zeile 325 in 31_fronthemDevice.pm&lt;br /&gt;
: Zeile 154 in 01_fronthem.pm&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic= 36407|Message=287499|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird. {{Link2Forum|Topic= 30909|Message=236073|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem.&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=269984|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist bekannt, dass ein manuelles Editieren der fhem.cfg ebenfalls dazu führen kann, dass die Liste leer bleibt.&lt;br /&gt;
{{Link2Forum|Topic=43796|Message=357097|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== alte GADs löschen ===&lt;br /&gt;
&lt;br /&gt;
Hat man einmal aus versehen einen Demoraum ausgewählt und vergessen den Treiber auf Offline zu stellen, füllt sich der GAD-Editor mit allen GADs aus dem Demoraum. Um diese wieder zu löschen gibt es entweder den Weg über den GAD-Editor (gad-Editor -&amp;gt; gad anklicken -&amp;gt; delete) oder die Möglichkeit direkt die fhserver.fronthem.cfg zu editieren. {{Link2Forum|Topic=47281|Message=390051|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich unter ./fhem/www/fronthem/server/&amp;lt;devicename&amp;gt;. {{Link2Forum|Topic=46214|Message=379959|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände. {{Link2Forum|Topic= 30909|Message=281398|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
Für ein Script, dass variable fronthemDevices anlegt, sei auf diesen {{Link2Forum|Topic= 50328|Message=420580|LinkText=Forumsbeitrag}} verwiesen.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Artikel, der sich mit dem Thema befasst, ist dieser {{Link2Forum|Topic= 50019|Message=417592|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=30909|Message=257681|LinkText=Addon-Treiber}} um eine weitere Steuerung Daten in SV zu visualisieren .&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15620</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15620"/>
		<updated>2016-06-22T18:27:25Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sind. Ein weiterer separater Artikel beschreibt die [[Installation Fronthem|Installation von Fronthem]].&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fromthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
Die Datei 01_fronthem.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
Die Datei 31_fronthemDevice.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei fhconverter.pm, die die oben genannten Converter enthält, liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB. Er wird durch die Datei fronthemEditor.js realisiert, die im Ordner .../fhem/www/frontend/pgm2/ abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== generelles Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Errors schauen&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=Forum}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird. {{Link2Forum|Topic= 30909|Message=236073|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem.&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=269984|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) (Anmerkung: Ist das tatsächlich so?) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände. {{Link2Forum|Topic= 30909|Message=281398|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15619</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=15619"/>
		<updated>2016-06-22T18:26:12Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Gruundsätzliche Überarbeitung der Artikelserie fronthem/smartVISU&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm, 31_fronthemDevice.pm, fhconverter.pm, fronthemEditor.js&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel befasst sich mit den FHEM-Modulen und weiteren Dateien, die für die Integration von fronthem in FHEM notwendig sein. Ein weiterer separater Artikel beschreibt die [[Installation Fronthem|Installation von Fronthem]].&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. [[smartVISU]]) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im {{Link2Forum|Topic= 27291|Message=27291.0l|LinkText=fhem-Forum}} erstmalig angekündigt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation eines passenden Web-Frontends (z.B. smartVISU), sowie dessen [[smartVISU Installation|Installation]] gibt es jeweils eigenständige Artikel. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Redaktionelle Überarbeitung der Detailbeschreibung für Readings Converter RGBCombined. Beschreibung der Converter ReadingsTimestamp, Attribute, Trigger.}}&lt;br /&gt;
&lt;br /&gt;
Die Integration von fronthem als Interface innerhalb von FHEM besteht aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket Server wird durch das fhem-Modul &amp;quot;fromthem&amp;quot; automatisch gestartet, sobald ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; definiert wurde. Der zugehörige Prozess läuft vom fhem Hauptprozess entkoppelt und kann mit ihm kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird standardmäßig auf Port 2121 angesprochen, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist dieses das eigentliche Interface zwischen FHEM und einem externen Frontend.&lt;br /&gt;
&lt;br /&gt;
Die Datei 01_fronthem.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Ein Device-Connector dient dazu, ein Endgerät eines Benutzers (PCs, Tablets, Smartphones usw.) als Clients zu konfigurieren und dessen Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die Nachkommen oder Gäste zwar das Licht und die Heizung im eigenen Raum steuern, nicht aber die Programmierung der Heizung ändern oder den Alarm ausschalten.&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird dabei jeweils als Device vom TYPE &amp;lt;code&amp;gt;fromthemdevice&amp;lt;/code&amp;gt; innerhalb von FHEM definiert. Details zur genauen Einrichtung finden sich im [[#Integration in FHEM|Verlauf]] dieses Artikels.&lt;br /&gt;
&lt;br /&gt;
An einem einzelnen Device-Connector werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet (GADs) und können dort einerseits mit fhem devices verbunden und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Kombination der Frontend-items (GADs) mit den fhem-Devices über die Converter wird nur einmal benötigt und hat eine globale Gültigkeit. Die Berechtigungen der verwendeten Endgeräte werden jeweils pro Endgerät gesetzt. Details zum Konfigurieren und Duplizieren von Berechtigungen finden sich im weiteren [[#Integration in FHEM|Verlauf]] dieses Artikels. Auch eine Zugriffsberechtigung über eine PIN-Abfrage ist angedacht, bislang (Juni 2016) aber noch nicht implementiert.&lt;br /&gt;
&lt;br /&gt;
Änderungen von Readings, Events werden dabei per {{Link2Forum|Topic= 27291|Message=209920l|LinkText=push}} auf die Devices verweilt.&lt;br /&gt;
&lt;br /&gt;
Die Datei 31_fronthemDevice.pm für dieses Modul liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
&lt;br /&gt;
Die readings converter dienen dazu, die Verbindung zwischen den Informationen in FHEM (states, readings, events) und den Formaten, die innerhalb des Frontends verwendet werden, herzustellen. Die Readings von FHEM müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in FHEM kompatible Befehle umgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über das Konzept der converter können FHEM-Devices unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In den genannten Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Standardmäßig gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
* [[#ReadingsTimestamp]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Attribute]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
* [[#Trigger]] (vorhanden, Beschreibung TODO)&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter können darüber hinaus [[#eigene Converter|individuell selbst]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Datei fhconverter.pm, die die oben genannten Converter enthält, liegt standardmäßig wie alle anderen Module im Ordner .../fhem/FHEM/.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebenen Converter sind kompatibel mit dem oben erwähnten Frontend smartVISU und werden auf dessen Basis erklärt. Für die Verwendung in Kombination mit anderen Frontends müssen die Converter möglicher Weise entsprechend angepasst werden. &lt;br /&gt;
&lt;br /&gt;
====Direct====&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
====NumDirect====&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zu Direct besteht jedoch darin, dass nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man einen minimalen und maximalen Wert mit angeben. Dieses soll verhindern, dass im Frontend Werte eingestellt werden, die überhaupt keinen Sinn ergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:In der smartVISU könnte man für einen Raumthermostaten z.B. -100°C einstellen, was der Aktuator auf Seiten von FHEM nicht umsetzen kann (minimal einstellbarer Wert).&lt;br /&gt;
&lt;br /&gt;
==== NumDisplay ====&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, von FHEM zum Frontend. Die Werte werden ohne Umwandlung weitergegeben, bis auf die Tatsache, dass wie beim Converter NumDirect nur Zahlenwerte übergeben werden, d.h. die Zahlen werden aus &amp;lt;reading&amp;gt; herausgefiltert.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Anzeige des Raumklimas (Temperatur, Feuchtigkeit, CO2, Lautstärke, etc.)&lt;br /&gt;
&lt;br /&gt;
==== OnOff ====&lt;br /&gt;
&lt;br /&gt;
Dieser Converter ist für das einfache Schalten von Ein/Aus-Funktionen vorgesehen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, innerhalb von smartVISU entsprechen diese Zustände jedoch 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional ineinander um.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Schalter&lt;br /&gt;
&lt;br /&gt;
==== RGBCombined ====&lt;br /&gt;
Dieser Converter dient zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis). Eine Besonderheit ist hier, dass smartVISU die 3 RGB Werte separat verarbeitet. D.h. von FHEM wird ein RGB-Wert in HEX in 3 Werte, jeweils für R, G und B, aufgeteilt und an das Frotnend übergeben. In umgekehrter Richtung wird die Auswahl einer Farbe im Frontend mit den 3 Werten für R, G und B an den Converter übergeben, kombiniert und an FHEM übergeben. &lt;br /&gt;
&lt;br /&gt;
Entsprechend arbeitet er bidirektional und wandelt 3 Frontend Items in ein FHEM-Objekt um. Damit die Kombination der Werte funktioniert, muss dieser Converter gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben&lt;br /&gt;
&lt;br /&gt;
==== ReadingsTimestamp ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Attribute ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== Trigger ====&lt;br /&gt;
Dieser Converter ist im Modul bereits enthalten, dessen Beschreibung ist allerdings TODO.&lt;br /&gt;
&lt;br /&gt;
==== eigene Converter ====&lt;br /&gt;
Zusätzlich zu den bestehenden Convertern besteht die Möglichkeit, eigene zu definieren. Diese können in der 99_myUtils.pm oder einer neu angelegten 99_fronthemUtils.pm definiert werden. Es ist nicht ratsam, die fhconverter.pm dafür zu verwenden, da bei einem möglichen späteren Update diese Datei überschrieben wird. Wie alle anderen Module, muss sich die Datei im Verzeichnis./fhem/FHEM/ befinden.  ({{Link2Forum|Topic= 30909|Message=266944|LinkText=Forum}}) &lt;br /&gt;
&lt;br /&gt;
Eigene Converter müssen nur die gleiche Signatur haben und in dem gleichen namespace wie die im fhconverter.pm stehen dann werden sie dynamisch geladen und stehen in fronthem zur Verfügung. ({{Link2Forum|Topic= 30909|Message=236070l|LinkText=Forum}})&lt;br /&gt;
&lt;br /&gt;
==== Ideen für weitere Converter ====&lt;br /&gt;
&lt;br /&gt;
Zwei weitere Converter sind angedacht, aber derzeit noch nicht Teil des Moduls.&lt;br /&gt;
&lt;br /&gt;
===== NumDelayed =====&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===== WordDisplay =====&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
Der Converter soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen. Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
&lt;br /&gt;
Um einen komfortable Möglichkeit zur Verfügung zustellen, die Bindung und Konvertierung zwischen FHEM Device/Reading und Frontend-Objekt festzulegen, gibt es einen Javascript Editor als Erweiterung von FHEMWEB. Er wird durch die Datei fronthemEditor.js realisiert, die im Ordner .../fhem/www/frontend/pgm2/ abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sobald ein fronthemDevice (Definition für ein Endgerät) definiert ist, kann man über dessen Details in FHEMWEB die GADs definieren und die Rechte verteilen. &lt;br /&gt;
&lt;br /&gt;
==== GAD Liste ====&lt;br /&gt;
Auf der Detailseite werden im oberen Teil die GADs aufgelistet die von smartVisu &amp;quot;angefragt&amp;quot; wurden. In vier Spalten werden von links der GAD-Name (wie auf der smartVISU-Seite definiert), das damit verbundene FHEM-Device, für das frontemDevice gesetzte Lese-Rechte und Schreib-Rechte angezeigt. Im oberen Teil des Fensters lässt sich eine Zeichenkette eingeben, nach der die Liste gefiltert wird. (Zumindest in Dark-Style hat die Schrift der eingegebenen Zeichenkette die gleiche Farbe wie der Hintergrund).&lt;br /&gt;
&lt;br /&gt;
Die Verknüpfung zwischen GAD und FHEM-Device gilt global und muss nur einmal für ein beliebiges fronthemDevice eingerichtet werden. Lese- und Schreibrechte können pro fronthemDevice konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig zu berücksichtigen ist die Tatsache, dass die GAD-Liste erst dann aktualisiert wird, wenn einmal die entsprechende Frontend-Seite von einem frontendDevice aufgerufen wurde. Die korrekte Konfiguration des Treiber auf der Config-Seite für das frontendDevice (siehe Installation des Frontends) wird dabei vorausgesetzt. Die Liste wird also erst gefüllt, wenn erstmalig vom Frontend über einen Seitenaufruf die Verbindung zu FHEM initiiert wurde.&lt;br /&gt;
&lt;br /&gt;
==== GAD Edit ====&lt;br /&gt;
Klickt man auf einen GAD aus der obigen Liste, öffnet sich ein weiteres Feld mit Titel &amp;quot;GAD Edit&amp;quot;.&lt;br /&gt;
Das Feld ist in 2 Teile aufgeteilt, im oberen das globale Mapping zwischen GAD und FHEM-Device/Reading, darunter die Zugriffsrechte für das jeweilige Device. Am unteren Ende des Feldes sind Schaltflächen für das Löschen und Sichern von GADs aus der Liste oder das Abbrechen der Bearbeitung angeordnet.&lt;br /&gt;
&lt;br /&gt;
Die GAD-Definierung im oberen Bereich besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
&lt;br /&gt;
===== mode =====&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Modi:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
&lt;br /&gt;
Die Unterscheidung ist selbsterklärend, alles was kein &amp;quot;plot&amp;quot; werden soll, wird als &amp;quot;item&amp;quot; definiert.&lt;br /&gt;
&lt;br /&gt;
===== device =====&lt;br /&gt;
&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden, bzw. dessen Readings angezeigt werden sollen. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== reading =====&lt;br /&gt;
&lt;br /&gt;
Für das &amp;lt;reading&amp;gt; wird das zu verwendende Reading des FHEM Devices angegeben, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Änderungen, wenn fhem entsprechende events erzeugt, werden von fronthem mitgelesen und per push an die fronthemDevices gesendet.&lt;br /&gt;
&lt;br /&gt;
===== converter =====&lt;br /&gt;
&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte. Wie oben beschrieben, stehen unterschiedliche [[#readings converter|converter]] für verschiedene Aufgabenstellungen zur Verfügung. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Wie überall innerhalb von FHEM ist die Groß/Kleinschreibung zu beachten.&lt;br /&gt;
&lt;br /&gt;
===== cmd set =====&lt;br /&gt;
&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Devicerechte vergeben ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*Eine Berechtigung für &amp;quot;read&amp;quot;&lt;br /&gt;
*Eine Berechtigung für &amp;quot;write&amp;quot;&lt;br /&gt;
*Jeweils für Lese- und Schreib-Berechtigung die Festlegung eines PINs&lt;br /&gt;
&lt;br /&gt;
===== read =====&lt;br /&gt;
Das Device darf die Statuswerte auslesen.&lt;br /&gt;
&lt;br /&gt;
===== write =====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
===== PIN GAD =====&lt;br /&gt;
&lt;br /&gt;
Die PIN-Abfrage für die Lese- oder Schreibberechtigung ist derzeit noch nicht implementiert, daher ist es irrelevant, was hier eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
===== Attribut Whitelist =====&lt;br /&gt;
Möchte man die differenzierte Berechtigungssteuerung für ein fronthemDevice außer Kraft setzen, kann das Attribut &amp;quot;whitelist&amp;quot; für das entsprechende fronthemDevice auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den Berechtigungs-Checkboxen das fronthemDevice immer für alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== fronthem ===&lt;br /&gt;
&lt;br /&gt;
Ein Device vom TYPE &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und damit das eigentlich Interface, wird nach erfolgreicher Sicherstellung der Voraussetzungen (siehe fronthem Installation) über folgenden Befehl in der Eingabezeile von FHEMWEB definiert: &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Definition wird ebenfalls die Verbindung zum WebSocket sichergestellt. Logischer Weise benötigt man nur ein Device von diesem Typ.&lt;br /&gt;
&lt;br /&gt;
Als Reading wird&lt;br /&gt;
* die Verbindung zum WebSocket angezeigt. &amp;quot;open&amp;quot; stellt dabei den normalen Zustand dar.&lt;br /&gt;
* lastError angezeigt, woran man beispielsweise erkennen kann, dass für Endgerät der Zugriff abgelehnt wurde (&amp;quot;client &amp;lt;IP-Adress&amp;gt; rejected&amp;quot;).&lt;br /&gt;
 &lt;br /&gt;
Der state des Devices gibt dabei derzeit keine Meldung zurück. Ein Wert &amp;quot;???&amp;quot; ist daher kein Hinweis auf einen Fehler, sondern entspricht dem ganz normalen Modulverhalten.&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Für jedes Endgerät (smartphone, PC, Tablet, etc.) mit dem man auf das Frontend zugreifen möchte, muss ein entsprechendes fronthemDevice definiert werden.&lt;br /&gt;
Wie oben bereits beschrieben, kann dadurch genau festgelegt werden, welches Endgerät welche Rechte für eine jeweilige Schalt-/Anzeigefunktion hat.&lt;br /&gt;
&lt;br /&gt;
Wenn man die Berechtigungen für neue Endgeräte kopieren möchte, liegen diese unter ./fhem/www/fronthem/clients/&amp;lt;fronthemDevice&amp;gt; und lassen sich so einfach für neue Endgeräte übertragen.&lt;br /&gt;
&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
&lt;br /&gt;
Ein Endgerät wird über seine IP_Adresse identifiziert. Dies ist nur im internen gesicherten Netzwerk empfehlenswert. Es wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist für die IP-Adresse die des Endgerätes anzugeben, welches auf den smartVISU zugreifen soll (also das Tablet, Rechner, Smartphone etc.). Entsprechend selbstverständlich ist, dass man durch eine passende Einstellung seine DHCP-Servers oder fest vergebene IP-Adressen sicherstellt, dass ein Endgerät immer die gleiche IP erhält/verwendet.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der späteren Verwendung ist, dass pro Endgerät immer nur ein Brower-Tab geöffnet wird, mit dem man auf das Frontend zugreift. Sonst erhält fronthem mehrere Zugriffe von der gleichen IP, die sich gegenseitig ins Gehege kommen.&lt;br /&gt;
&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
{{Randnotiz|RNTyp=info|RNText=Hinweis: Diese Möglichkeit wurde während der Entwicklung bereits diskutiert und berücksichtigt, die Verwendung von Zertifikaten wurde bislang aber noch nicht implementiert, hauptsächlich aufgrund der teilweise mangelnden oder zumindest sehr unterschiedlichen Unterstützung von Zertifikaten auf Endgeräte-Seite (z.B. webviewcontrol).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Endgerät wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Endgerät installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
=== generelles Vorgehen ===&lt;br /&gt;
&lt;br /&gt;
Generelles Vorgehen bei seltsamen Erscheinungen:&lt;br /&gt;
* smartVISU-Page-Cache ausschalten (auf der Config Seite von smartVISU, wo auch der Treiber konfiguriert wird)&lt;br /&gt;
* smartVISU-temp-Verzeichnis leeren (e.g. /var/www/html/smartvisu/temp)&lt;br /&gt;
* Browser neu starten&lt;br /&gt;
* Konsole im Browser öffnen und nach Errors schauen&lt;br /&gt;
* Verbose Level des FHEM-Device &amp;lt;code&amp;gt;fronthem&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fronthemDevice&amp;lt;/code&amp;gt; auf 5 setzen und im Log nach Errors schauen&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=272083|LinkText=Forum}}, {{Link2Forum|Topic= 35960|Message=285384|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine Events ===&lt;br /&gt;
&lt;br /&gt;
Es gibt immer mal die Situation, dass man events unterdrückt und für eine spätere Anwendung in Zusammenhang mit einem Frontend, sich nicht mehr daran erinnert. Daher sollte bei ausbleiben eines entsprechenden Auslösung aus FHEM immer kontrolliert werden, dass die Events nicht durch event-min..., event-on..., etc. unterdrückt wird. {{Link2Forum|Topic= 30909|Message=236073|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== keine GADs im Editor ===&lt;br /&gt;
&lt;br /&gt;
Die GADs werden beim Aufruf einer Seite (in smartVISU) an fhem übertragen.&lt;br /&gt;
In smartVISU ein &amp;lt;code&amp;gt;ctrl+F5&amp;lt;/code&amp;gt; ausführen, danach einen Seitenreload in fhem.&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=269984|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== Verbindung ===&lt;br /&gt;
&lt;br /&gt;
Erhält an eine &amp;quot;no connection&amp;quot; Warnung in smartVISU sollte man folgendes kontrollieren:&lt;br /&gt;
* Wurde auf der config-Seite von smartVISU auf dem Endgerät der Treiber auf &amp;quot;Fhem&amp;quot; gestellt?&lt;br /&gt;
* Ist auf der config-Seite von smartVISU auf dem Endgerät die richtige Adresse des WebSocket Servers (meistens der Server mit der FHEM-Instanz) und der Port 2121 eingetragen?&lt;br /&gt;
* Wurde für das fronthemDevice die richtige IP-Adresse definiert?&lt;br /&gt;
* Steht &amp;quot;connected&amp;quot; im state des fronthemDevice ?&lt;br /&gt;
{{Link2Forum|Topic= 30909|Message=236681|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== VPN ===&lt;br /&gt;
&lt;br /&gt;
Beim Zugriff durch einen VPN-Tunnel muss sichergestellt sein, dass der VPN-Tunnel sowohl Zugriff auf Port 8083 (FHEMWEB) (Anmerkung: Ist das tatsächlich so?) als auch auf Port 2121 (fronthem) zulässt. Darüber hinaus wird einem per VPN angemeldeten Endgerät normalerweise eine andere interne IP-Adresse zugeordnet, als wenn das Endgerät sich im lokalen LAN befände. {{Link2Forum|Topic= 30909|Message=281398|LinkText=Forum}}&lt;br /&gt;
&lt;br /&gt;
=== alternativer Treiber zum loggen auf der Konsole ===&lt;br /&gt;
&lt;br /&gt;
Falls mal ein Widget den Websocket Server zum Absturz bringt, was mittlerweile nicht mehr passieren sollte, wurde im {{Link2Forum|Topic= 30909|Message=273617|LinkText=Forum}} ein Treiber veröffentlich, der das &amp;quot;überlebt&amp;quot; und auf der Konsole weiter loggt, welches Widget es verursacht hat.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{{Link2Forum|Topic= 27291|Message=219207|LinkText=Detaillierte Funktionsbeschreibung}} aus der Entwicklungszeit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/Universelle_ZeitSchaltUhr_(UZSU)&amp;diff=15618</id>
		<title>SmartVISU/Universelle ZeitSchaltUhr (UZSU)</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/Universelle_ZeitSchaltUhr_(UZSU)&amp;diff=15618"/>
		<updated>2016-06-22T18:20:02Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Auslagerung des Themas UZSU aus dem fronthem Artikel.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU/Universelle ZeitSchaltUhr (UZSU)}}&lt;br /&gt;
Dieser Artikel behandelt die Einrichtung einer universellen Zeitschaltuhr innerhalb des Frontends [[smartVISU]].&lt;br /&gt;
&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU-Seiten wie gewohnt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis, das der Benutzer direkt eintippen kann, z.B. &#039;on&#039; oder &#039;off&#039;)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder Text als Dropdown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oder (für eine einzugebende Ziffer zwischen 0 und 100)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;num&#039;, [0, 100]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (für ein Ergebnis {0,1}, das aber als flip mit &#039;an&#039; und &#039;aus&#039; angezeigt wird)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;bool&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
&lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setreading &amp;lt;device&amp;gt; uzsu {}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erzeugen MUSS.&lt;br /&gt;
&lt;br /&gt;
2. eine Anbindung des UZSU-GAD per UZSU Converter aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem (ist bei aktuellem fronthem alles schon drin)&lt;br /&gt;
&lt;br /&gt;
Dieser Code erzeugt aus den Einstellungen im Widget entsprechende WeekdayTimer in fhem und löscht und erstellt neu bei jeder Änderung in SmartVISU.&lt;br /&gt;
&lt;br /&gt;
4. Die Funktion muss getriggert werden. Dazu ist ein notify nötig, das auf die Veränderung der uzsu Readings reagiert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. GAD Editor Einstellungen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mode:      item&lt;br /&gt;
device:    &amp;lt;DEIN_DEVICE&amp;gt;&lt;br /&gt;
reading:   uzsu&lt;br /&gt;
converter: UZSU&lt;br /&gt;
cmd set:   uzsu&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15617</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=15617"/>
		<updated>2016-06-22T18:19:06Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Auslagerung des Themas UZSU aus dem fronthem Artikel.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SmartVisu]] ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Codebeispiele:==&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Widgets werden im git-Repository https://github.com/herrmannj/smartvisu-widgets bereitgestellt:&lt;br /&gt;
&lt;br /&gt;
* [[smartVISU/Universelle ZeitSchaltUhr (UZSU)]]&lt;br /&gt;
* [[SmartVisu/ical|ical]] &lt;br /&gt;
* [[SmartVisu/fritz!box_via_TR-064|fritz!box_via_TR-064]] &lt;br /&gt;
* fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:PanStamp&amp;diff=15574</id>
		<title>Diskussion:PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:PanStamp&amp;diff=15574"/>
		<updated>2016-06-14T02:02:13Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Mit der Neustrukturierung der Artikelserie panStamp wurde die Diskussionsseite auf den aktuellen Stand gebracht (abgeschlossen).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
== Anmerkung für die hier vorgeschlagene Änderung des Hauptartikels ==&lt;br /&gt;
Während ich mich mit dem Thema vertraut gemacht habe, habe ich versucht, alle Informationen, die aus non-developer Sicht für die spätere Anwendung und Inbetriebnahme relevanten Informationen (also aus meiner ;) ) wichtig erscheinen, hier in einem Artikel zusammenfassen. Ich muss gestehen, bis ich meine ersten Panstamps am Laufen hatte, musste ich viel lesen und der derzeitige Artikel setzt mM recht viel Wissen voraus (alles eine Frage des Wissensstandes).&lt;br /&gt;
Die Inhalte des derzeitigen Artikels habe ich übernommen und einfließen lassen, d.h. es ist geplant, die derzeitige Seite zu ersetzen!&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel sind alle Posts bis heute (14.04.2015) aus den beiden Threads {{Link2Forum|Topic=12487 |Message=74967 |LinkText=Thema: panStamp support }} und {{Link2Forum|Topic=13890 |Message=86952 |LinkText=Thema: PanStamp Board RGB,CW,WW;DMX;IR }} berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
Da viele Informationen vor allen Dingen aus der Zeit der Entwicklung der Module und der Sketches stammen, bitte ich Euch, hier kritisch quer zu lesen, das geschriebene zu prüfen, ob noch aktuell und ggf. zu korrigieren, zu ergänzen oder im Forum konstruktiv zu kommentieren.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dinge, die mir unklar waren, da noch nicht getestet oder Dinge, die noch näherer beschrieben werden können, habe ich mit &amp;quot;?&amp;quot; bzw. &amp;quot;TBC&amp;quot; (to be confirmed) gekennzeichnet.&lt;br /&gt;
----&lt;br /&gt;
: Hallo, wie ist denn der Stand mit dem Artikel? Finde es schade, dass das gesammelte Know-how hier nur auf der Diskussionsseite zu finden ist. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 12:07, 15. Jul. 2015 (CEST)&lt;br /&gt;
----&lt;br /&gt;
:: Hallo TeeVau, danke, dass Du den Faden aufgenommen hattest. Ich habe die Struktur noch ein wenig überarbeitet und mit Berücksichtigung meiner ursprünglichen Idee den Artikel [[panStamp]] ersetzt. Die Neustrukturierung ist aus meiner Sicht damit vollzogen und abgeschlossen, mein ursprüngliches Ziel erreicht. Änderungshistorie der Artikelserie ist {{Link2Forum|Topic=54109|Message=458488l|LinkText=hier}} nochmal beschrieben.-- [[Benutzer:joshi04|joshi04]] ([[Benutzer Diskussion:joshi04|Diskussion]]) 03:38, 14. Jun. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 34_panStamp.pm] [http://fhem.de/commandref.html#SWAP 34_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Todo:Fehlerkontrolle, Formatierung, Ergänzung, Bestätigung des Geschriebenen, weitere Informationen zur Erstellung/Anpassung eines Device Description Files, Bestätigung des Hochladens mittels XLoader, Bedienung in FHEMWEB(RGB-Board/Sketch)&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
==== panStamp mit Antenne ====&lt;br /&gt;
[http://www.panstamp.com/home panStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es zwei verschiedene panStamps (AVR und NRG), von denen der NRG neuer und etwas mehr Features zur Verfügung stellt, allerdings (noch) nicht mit allen hier beschriebenen Projekten kompatibel ist.&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Inhalt wurde spätestens mit der Neustrukturierung der Artikelserie &amp;quot;panStamp&amp;quot; eingearbeitet. -- [[Benutzer:joshi04|joshi04]] ([[Benutzer Diskussion:joshi04|Diskussion]]) 03:38, 14. Jun. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
==== Panstick oder Panshield ====&lt;br /&gt;
Als Schnittstelle zwischen Server-Hardware und einem panStamp dient entweder ein panStick (USB Stick mit Sockel zum aufstecken eines panStamp) oder ein &amp;quot;panStamp Shield&amp;quot; mit integriertem panStamp an einem Raspberry Pi. Der Panstick stellt dabei die Verbindung zwischen dem USB-Port auf der einen Seite und dem seriellen Interface des Panstamps auf der anderen Seite dar. Ein Panshield übernimmt die gleiche Funktion, wird aber direkt an die IOs eines Raspberries angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Der Panstick wird grundsätzlich für zwei Aufgaben benötigt:&lt;br /&gt;
# Für die Vorbereitung eines panStamps für den Betrieb auf einem &amp;quot;Board&amp;quot; wird der neue panStamp in den Panstick gesteckt, um die Programmierung (flashen des Sketch) vorzunehmen.&lt;br /&gt;
# Im &amp;quot;normalen&amp;quot; Betrieb steckt ein panStamp auf ihm. Der so angebundene panStamp wird mit einem (bei Auslieferung des PanStamps vorinstallierten) Modem-Sketch als RF Modem verwendet und dient so dem Rechner als Interface zu anderen panStamps, zu denen über eine Funkstrecke mittels des SWAP-Protokolls kommuniziert wird.&lt;br /&gt;
&lt;br /&gt;
Da auf dem panStamp Shield der panStamp fest eingelötet ist, übernimmt dieser in der Regel nur die zweite Funktion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel &amp;lt;nowiki&amp;gt;[[panStick]]&amp;lt;/nowiki&amp;gt; übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 21:10, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== spezifisches &amp;quot;Board&amp;quot; ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
: Im Gegenzug zum Panstick als Interface zwischen panStamp und USB-Port des Servers stellt das Board das Interface zwischen panStamp vor Ort und Input/Outputs (analog/digital) dar. Das &amp;quot;Board&amp;quot; nimmt den panStamp mit dem passenden Sketch auf und setzt die Outputs des panStamps auf die Ausgänge um bzw. leitet die Eingänge zur Auswertung an den panStamp weiter.&lt;br /&gt;
: Entsprechend Anwendungsfall und Sketch werden die Ein-/Ausgänge des panStamps verarbeitet. Z.B. können an ein Board Temperatur-, Feuchtigkeitssensoren oder LED-Strips angeschlossen werden. Der Sketch auf dem panStamp sollte entsprechend der Anwendung auf dem Board angepasst worden sein um nicht nur über die standardmäßig zur Verfügung stehenden Register kommunizieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
: Das Board benötigt irgend eine Art von Stromversorgung, um den panStamp zu betreiben. Das kann im Falle eines Sensorboards und entsprechend stromsparend ausgelegtem Sketch eine Batterie sein oder wie im Falle des RGB-Boards eine externe Stromversorgung. &lt;br /&gt;
: Speziell beim unten beschriebenen RGB-Board kann die Stromversorgung sogar separat für panStamp und LEDs ausgeführt sein oder ingesamt panStamp und LEDs gemeinsam versorgen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[panStamp]] übernommen.--[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
=== Software ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Simple Wireless Abstract Protocol (SWAP) ====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&amp;lt;/strike&amp;gt; In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 19:59, 16. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Modem-Sketch ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel &amp;lt;nowiki&amp;gt;[[panStick]]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Der Modem-Sketch stellt das Software-Verbindungsglied zwischen panStamp und Funksignal dar, dass an andere panStamps geht. &lt;br /&gt;
&lt;br /&gt;
Auf jedem panStamp (AVR, NRG?) ist im Auslieferungszustand der Modem-Sketch installiert. Das Protokoll der Funkstrecke folgt dem SWAP-Protokoll.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel &amp;lt;nowiki&amp;gt;[[panStick]]&amp;lt;/nowiki&amp;gt; übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== auf Board abgestimmter Sketch ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Ein panStamp ist auf einem entsprechenden Board installiert und übernimmt dort lokal die Schnittstelle zwischen Funkstrecke und Board. &lt;br /&gt;
&lt;br /&gt;
Der Sketch stellt dabei die passende &amp;quot;Software&amp;quot; auf dem panStamp. Der Sketch verarbeitet die über das SWAP-Protokoll versandte Nachrichten, wertet diese aus, reagiert entsprechend und setzt die Outputs des Boards. In umgekehrter Richtung wertet er die an den Inputs des Board angelegten Signale aus, verarbeitet diese und schickt sie per SWAP-Protokoll zum Panstamp mit Modem-Sketch zurück.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[panStamp]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Module  und Description File ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Die Integration in FHEM erfolgt über eine Reihe von Modulen die im folgenden genauer beschrieben werden. Zusammengefasst gibt es 3 Ebenen mit der Ergänzung eines Konfigurationsfiles in xml-format.&lt;br /&gt;
{{Link2Forum|Topic= 13890 |Message=121689 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,13890.msg121689.html#msg121689]&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[panStamp]] übernommen.--[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Ebene 1: 34_panStamp.pm =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Das Modul ist für einen panStamp der auf einem panStick sitzt und das Interface zwischen FHEM und dem panStamp netz bildet. Alle eintreffenden SWAP-Pakete auf dem panStick (mit Modem-Sketch) werden direkt durchgereicht und im nachfolgend beschriebenen SWAP-Modul verarbeitet.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[panStamp]] übernommen.--[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Ebene 2: 34_SWAP.pm =====&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Das Modul implementiert das SWAP protokoll das zwischen den panStamps gesprochen wird. Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM.&lt;br /&gt;
&lt;br /&gt;
Bei SWAP geht alle Komunikation über &#039;register&#039;, dies sind unterschiedlich lange Werte die entweder nur gelesen oder gelesen und geschrieben werden können. Jedes device hat eine Reihe System register (00-0A) und beliebig viele user register die vom jeweiligen Sketch abängen. Welche Register dies sind, steht unter anderem jeweils im Device Description xml file im Verzeichnis .../FHEM/lib/SWAP.&lt;br /&gt;
&lt;br /&gt;
In den System Registern steht z.b. der productcode, die device adresse und das Übertragungsintervall. Konfigurierbare register werden im EEPROM gesichert und die Werte gehen auch beim Neustart nicht verloren. Beim aller ersten Starten ist das EEPROM mit &amp;quot;FF&amp;quot; initialisiert und alle konfigurierbaren register haben diesen Wert. also z.b. Adresse FF und Intervall FFFF (HEX in Sekunden, das wären dann zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Inhalte der System Register stehen als internal values im oberen Bereich der Detail Ansicht einer Komponente in FHEM, die user register als readings im unteren.&lt;br /&gt;
&lt;br /&gt;
Alle low level Dinge wie Register id oder Register Wert können mit hex werten direkt angepasst werden. Im Normalbetrieb ist dieses aber nicht notwendig und es kann über &#039;vereinfachte&#039; Kommandos mit den register namen verwenden kann. Diese Funktionalität stellt das eines der Module zur Verfügung.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
set &amp;lt;device&amp;gt; regSet 08 &amp;lt;netzwerk id als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87436 }}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=12487.msg87436#msg87436]&lt;br /&gt;
&lt;br /&gt;
Dieses Modul stellt unter anderem folgende grundlegende Funktionalitäten zur Verfügung&lt;br /&gt;
* Es wird eine command Liste für Devices im power down Modus gehalten. Sobald das Device online kommt werden die Kommandos automatisch übertragen.&lt;br /&gt;
* Die userReadings für &#039;menschenlesbare&#039; Readings werden anhand des device description files automatisch erzeugt&lt;br /&gt;
* Es ist jetzt möglich direkt endpoints (teile eines registers) zu schreiben (???)&lt;br /&gt;
* (Fast) keine hardkodierte Sonderbehandlung mehr für das RGB-Board. Das SWAP Modul kann mit jedem beliebige Swap Device umgehen.&lt;br /&gt;
* Es gibt eine dritte (optionale) Modulschicht neben dem panStamp modul für die Hardware und dem SWAP Modul für das Protokoll. Mit dem generellen SWAP Modul lasen sich alle SWAP devices &#039;zu fuss&#039; über die register ansprechen. Um die register auf einer höheren Ebene auf FHEM Kommandos wie on/off/on-for-timer zu mappen ist dann diese dritte schicht zuständig. &lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=78502 }} &lt;br /&gt;
[http://forum.fhem.de/index.php/topic=12487.msg78502#msg78502]&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 19:59, 16. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Ebene 3: SWAP_XXXXXXXXXXXXXXXX.pm =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
Mit dieser dritten Modulebene ist es auch für Aktore wie Schalter/Dimmer/... sehr einfach, diese in FHEM zu integrieren. &lt;br /&gt;
&lt;br /&gt;
Wenn die Namenskonvention SWAP_&amp;lt;ProductCode&amp;gt; für diese Module eingehalten wird, funktioniert auch das autocreate sofern das Modul in FHEM bekannt ist.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für das RGB-Board dafür ist das Modul 35_SWAP_0000002200000003.pm.&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[panStamp]] übernommen.--[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Device Description File =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. &lt;br /&gt;
Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel ist das Description File für das RGB-Board rgbdriver.xml.&lt;br /&gt;
&amp;lt;/strike&amp;gt; In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 19:59, 16. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Systemübersicht ===&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Zum besseren Verständnis der Begrifflichkeiten und Zusammenhänge ist hier eine Systemübersicht dargestellt.&lt;br /&gt;
[[Datei:Panstamp-Systemoverview.jpg|200px|thumb|panStamp Systemübersicht]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=75980 }}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=12487.msg75980#msg75980]&lt;br /&gt;
&lt;br /&gt;
Die Kommunikationskette ist wie folgt:&lt;br /&gt;
FHEM -&amp;gt; Host-hardware/OS -&amp;gt; USB -&amp;gt; Panstick -&amp;gt; panStamp (Modem-Sketch) -&amp;gt; Funkstrecke (SWAP) -&amp;gt; panStamp (angepasster Sketch) -&amp;gt; Board -&amp;gt; Sensoren/LED-Strip/etc.&lt;br /&gt;
&lt;br /&gt;
(Ein Panshield ersetzt &amp;quot;USB -&amp;gt; Panstick&amp;quot; durch &amp;quot;IO&#039;s am Rpi-&amp;gt; Panshield&amp;quot;)&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt übernommen in Artikel [[panStamp]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 19:50, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Schritte der Inbetriebnahme ==&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Beispiel für Kurzentschlossene anhand der Einrichtung für das RGB-Board:&lt;br /&gt;
&lt;br /&gt;
* Ein panStamp wird in einen Panstick gesteckt und der Panstick für die Programmierung z.B. unter Windows installiert. Selbstverständlich kann ein panStamp auch über diverse andere Möglichkeiten und unter diversen anderen Betriebssystemen und über diverse andere Schnittstellen programmiert werden.&lt;br /&gt;
* Arduino IDE vorbereiten (libs hinzufügen, Board auswählen, etc.).&lt;br /&gt;
* Ein Sketch wird in der Arduino IDE entsprechend konfiguriert, kompiliert und auf den panStamp hochgeladen.&lt;br /&gt;
* Der programmierte panStamp aus dem Panstick in das RGB-Board stecken.&lt;br /&gt;
* Einen panStamp mit Modem-Sketch in den Panstick stecken und an den FHEM-Host stecken.&lt;br /&gt;
* panStamp unter FHEM einrichten, wenn nicht durch autocreate automatisch geschehen.&lt;br /&gt;
* RGB-Board mit Strom versorgen und ggf. einmal Reset-Knopf drücken. Dann sollte, falls autocreate aktiv ist, der panStamp automatisch eingerichtet werden.&lt;br /&gt;
* SWAP-Device in FHEM an Gegebenheiten anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel &amp;lt;nowiki&amp;gt;[[panStamp (Systemübersicht)]]&amp;lt;/nowiki&amp;gt; übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 11:41, 24. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Programmierung eines panStamps ==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
=== unter Windows ===&lt;br /&gt;
&lt;br /&gt;
==== Installation Panstick ====&lt;br /&gt;
Für die Installation des Pansticks unter Windows gibt es mehrere Möglichkeiten.&lt;br /&gt;
# Installiert man eine Arduino IDE, kann dabei auch der Treiber für den Panstick mitinstalliert werden.&lt;br /&gt;
# Treiber von der offiziellen Homepage herunterladen und installieren [[http://www.ftdichip.com/]]. Die Treiber befinden sich ebenfalls im Unterordner drivers der Arduino IDE. &lt;br /&gt;
&lt;br /&gt;
Bei der Installation kann es sein, dass kein Treiber gefunden wird. Dann muss der entsprechende Treiber manuell ausgewählt werden entsprechend dieser Anleitung [[https://www.youtube.com/watch?v=SPdSKT6KdF8]].&lt;br /&gt;
&lt;br /&gt;
==== Arduino IDE vorbereiten ====&lt;br /&gt;
&lt;br /&gt;
Zum Flashen der panStamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Die IDE 1.5.x oder höher ist zwar mit den AVRs und NRGs kompatibel, wichtig zu wissen ist allerdings, dass mit dem Wechsel von 1.0.x zu 1.5.x oder höher es größere Änderungen der APIs gegeben hat. Dadurch lassen sich einige der bislang zur Verfügung stehenden Sketches (derzeit) nicht unter 1.5.x oder höher kompilieren (z.B. der RGB-Sketch). Für die IDE 1.0.x gibt es keine passenden Arduino Lib für den NRG [[https://github.com/panStamp/panstamp/wiki/First%20steps]], die daher nur mit den AVRs kompatibel sind. Im Folgenden wird sich für die Programmierung unter Windows daher auf die letzte 1.0.x IDE bezogen.&lt;br /&gt;
&lt;br /&gt;
* Man läd die &#039;&#039;&#039;Arduino IDE 1.0.x&#039;&#039;&#039; für Windows [[http://arduino.cc/en/Main/OldSoftwareReleases]]. &lt;br /&gt;
&lt;br /&gt;
* Für bestimmte Sketches müssen noch die entsprechenden Libs hinzugefügt werden (siehe [[panStamp#Sketch konfigurieren|explizite Anwendung]]).&lt;br /&gt;
&lt;br /&gt;
* Unter Tools/Board wird das &#039;&#039;&#039;passende Board&#039;&#039;&#039; ausgewählt, dass dem Chip auf dem Panstamp entspricht. Für den AVR: Arduino Pro or Pro Mini (3,3V, 8 MHz) /w ATmega328. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert, kann man in der IDE auch direkt panStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
* Nun muss unter Tools/Serieller Port noch der richtigen &#039;&#039;&#039;Com-Port&#039;&#039;&#039; auswählen werden, unter dem der Panstick eingebunden worden ist (entsprechend Gerätemanager).&lt;br /&gt;
&lt;br /&gt;
* Als letztes unter Tools/&#039;&#039;&#039;Programmer&#039;&#039;&#039; noch den AVRISP mkII auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Sketch vorbereiten, kompilieren und hochladen ====&lt;br /&gt;
&lt;br /&gt;
* Den Sketch läd man von der entsprechenden Quelle und entpackt die Dateien in einen Unterordner z.B. parallel zum libraries-Ordner (unter &amp;quot;Eigene Dateien&amp;quot;). Der Ordner darf &#039;&#039;&#039;nicht im&#039;&#039;&#039; libraries-Ordner liegen, da die Arduino IDE dort das Speichern nicht zulässt. Innerhalb des Unterordners erwartet die IDE die Dateien in einen Unterordner namens &amp;quot;sketch&amp;quot;.&lt;br /&gt;
* sketch.ino oder ähnlich in der Arduino IDE öffnen.&lt;br /&gt;
* Nun entsprechend den Bedürfnissen auf dem geöffneten Reiter in den config.h die nicht benötigten Zeilen mit &amp;quot;//&amp;quot; auskommentieren bzw. anpassen.&lt;br /&gt;
* Nun sollte über Sketch/Überprüften/Kompillieren die Erstellung des Sketches möglich sein.&lt;br /&gt;
* Falls erfolgreich unter Datei/Hochladen (ohne Programmer) den Sketch auf den Panstamp laden.&lt;br /&gt;
&lt;br /&gt;
Bezüglich der Anpassung des Sketches sind einige spezifische Informationen unten bei den expliziten Anwendungen ergänzt.&lt;br /&gt;
&lt;br /&gt;
==== Hexfile hochladen mit XLoader ====&lt;br /&gt;
Um ein fertig kompiliertes HEX-File hochzuladen, soll dieses über ein Programm namens XLoader möglich sein. [[http://xloader.russemotto.com]]&lt;br /&gt;
&lt;br /&gt;
=== unter Linux === &lt;br /&gt;
&lt;br /&gt;
==== Installation Panstick ====&lt;br /&gt;
&lt;br /&gt;
Zum einen kann es sein, dass der Panstick automatisch unter /dev/ttyUSBx einbunden wird. &amp;quot;x&amp;quot; steht für eine freie fortlaufende Nummer.&lt;br /&gt;
&lt;br /&gt;
Falls er nicht automatisch angelegt worden ist, kann man zunächst prüfen, ob dieser überhaupt eingebunden und richtig erkannt wurde.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sollte etwas ähnliches zurückmelden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 003 Device 002: ID 0403:0000 Future Technology Devices International, Ltd H4SMK 7 Port Hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls das Device nicht automatisch angelegt worden ist, muss dieses ggf. von Hand erledigen. &lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87746 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg87746.html#msg87746]&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Befehl sollte in der Liste ein  ttyUSB auftauchen. Normalerweise mit der Nummer 188.&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /proc/devices&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Das Device wird dann angelegt mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo mknod /dev/ttyUSB0 c 188 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich muss für den Betrieb des Pansticks das ftdi_sio Modul zur Verfügung stehen. Dieses lässt sich prüfen mit&lt;br /&gt;
&amp;lt;pre&amp;gt;lsmod&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Voraussetzung könnte den Betrieb an einer Fritzbox erschweren, da nicht sicher ist, ob dieses Modul standardmäßig immer installiert ist.&lt;br /&gt;
&lt;br /&gt;
Legt man das Device von Hand an, kann es sein, dass die Berechtigungen nicht richtig gesetzt sind.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2015.04.23 22:20:06 3: Opening panStick device /dev/ttyUSB0 &lt;br /&gt;
2015.04.23 22:20:06 3: Can&#039;t open /dev/ttyUSB0: Permission denied&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Device sollte für die Gruppe dialout Lese-/Schreibberechtigungen haben.&lt;br /&gt;
Ist dieses nicht der Fall, lassen sich diese über diesen Befehlt setzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown root:dialout ttyUSBx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird der &amp;quot;Besitz&amp;quot; festgelegt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+rw /dev/ttyUSBx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hiermit werden die Berechtigungen gesetzt.&lt;br /&gt;
&lt;br /&gt;
Der Benutzer &amp;quot;fhem&amp;quot; sollte selbstverständlich der Gruppe &amp;quot;dialout&amp;quot; angehören.&lt;br /&gt;
Ist dieses nicht der Fall:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo adduser fhem dialout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls dem nicht so sein sollte, hilft ggf. einer dieser beiden Links weiter:&lt;br /&gt;
[[https://www.youtube.com/watch?v=UOECwHhCWRg]] [[http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/07/15/bbb--usb-io-with-ftdi-ft2232h]] bzw. die Installation des Moduls.&lt;br /&gt;
&lt;br /&gt;
==== IDE unter MacOS ====&lt;br /&gt;
&lt;br /&gt;
Da für den RGB-Sketch die IDE 1.0.x benötigt wird und diese Java SE 6 eine Voraussetzung ist, stellt die IDE und MacOS keine Optimale Konfigurationsumgebung dar. Wer es trotzdem probieren möchte&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=82055 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg82055.html#msg82055]&lt;br /&gt;
&lt;br /&gt;
==== INO ====&lt;br /&gt;
Der RGB-Sketches wurde mit Hilfe des Tools INO entwickelt. &lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=82139 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg82139.html#msg82139]&lt;br /&gt;
&lt;br /&gt;
Die Installation erfolgt am leichtesten mit Hilfe des Tools pip.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen für das Tool sind darüber hinaus picocom für die Kommunikation mit der seriellen Schnittstelle und die arduino. Im gleichen Zuge lässt sich pip installieren.&lt;br /&gt;
Die benötigten Pakete werden über folgenden Aufruf installiert&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install picocom python-pip arduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Installation erfolgt im Anschluss über&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pip install ino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die für einen Sketch erforderlichen libs werden in den entsprechenden lib Ordner kopiert (dort in entsprechenden Unterordnern).&lt;br /&gt;
&lt;br /&gt;
Die Pfade im Zip sind an dieses Tool angepasst.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=94830 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg94830.html#msg94830]&lt;br /&gt;
&lt;br /&gt;
Der serielle Port in der ino.ini muss selbstverständlich an die passende dev-Schnittstelle angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Als letztes sind die Parameter für das Board noch in die board.txt unter /usr/share/arduino/hardware/arduino einzutragen. Die Parameter lassen sich von hier extrahieren [http://old.panstamp.com/downloads] bzw. lauten für den AVR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################&lt;br /&gt;
&lt;br /&gt;
panstamp.name=PanStamp v2.0 (3.3V, 8 MHz) w/ ATmega328&lt;br /&gt;
&lt;br /&gt;
panstamp.upload.protocol=arduino&lt;br /&gt;
panstamp.upload.maximum_size=30720&lt;br /&gt;
panstamp.upload.speed=57600&lt;br /&gt;
&lt;br /&gt;
panstamp.bootloader.low_fuses=0xE2&lt;br /&gt;
panstamp.bootloader.high_fuses=0xD8&lt;br /&gt;
panstamp.bootloader.extended_fuses=0x07&lt;br /&gt;
panstamp.bootloader.path=atmega&lt;br /&gt;
panstamp.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex&lt;br /&gt;
panstamp.bootloader.unlock_bits=0x3F&lt;br /&gt;
panstamp.bootloader.lock_bits=0x0F&lt;br /&gt;
&lt;br /&gt;
panstamp.build.mcu=atmega328p&lt;br /&gt;
panstamp.build.f_cpu=8000000L&lt;br /&gt;
panstamp.build.core=arduino&lt;br /&gt;
panstamp.build.variant=standard&lt;br /&gt;
&lt;br /&gt;
##############################################################&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig zu wissen: Jedes Mal, wenn die Arduino ein Update erhält, wird vermutlich diese Datei überschrieben, so dass die Eintragung wiederholt werden muss.&lt;br /&gt;
&lt;br /&gt;
Hier sind die grundlegendsten Befehle beschrieben [http://inotool.org/quickstart].&lt;br /&gt;
&lt;br /&gt;
Wechselt man nun in das Verzeichnis z.B. des RGBdriver, lässt die der Sketch kompilieren über&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ino build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und hochladen über&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ino upload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Troubeshooting&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=134786 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg134786.html#msg134786]&lt;br /&gt;
&lt;br /&gt;
=== over-the-air (derzeit) nur NRG ===&lt;br /&gt;
&lt;br /&gt;
Die neueren panStamp NRGs können seit einiger Zeit auch over-the-air geflasht werden, wie hier im zugehörigen Forumthread beschrieben [[http://forum.fhem.de/index.php/topic,30589.0.html]].&lt;br /&gt;
&lt;br /&gt;
=== Was überlebt das Flaschen ===&lt;br /&gt;
Bestimmte Konfigurationen überstehen das Flashen, dieses sind zumindest Adresse und Intervall, die nicht neu gesetzt werden müssen [http://forum.fhem.de/index.php/topic,12487.msg87560.html#msg87560].&lt;br /&gt;
&lt;br /&gt;
=== EEPROM löschen ===&lt;br /&gt;
&lt;br /&gt;
Das EEPROM lässt sich komplett löschen, indem man in der setup() dieses hier einträgt [http://forum.fhem.de/index.php/topic,13890.msg156868.html#msg156868].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eepromToFactoryDefaults()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel &amp;lt;nowiki&amp;gt;[[Programmierung eines panStamp]]&amp;lt;/nowiki&amp;gt; übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 11:36, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Integration in FHEM ==&lt;br /&gt;
=== FHEM Voraussetzungen ===&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Für den Betrieb ist XML:Simple notwendig, dass bei Bedarf folgendermaßen nachinstalliert werden kann [http://forum.fhem.de/index.php?topic=12487.msg87373#msg87373].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-simple-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Abhängigkeit kann beim Betrieb auf einer Fritzbox ebenfalls zu Problemen führen.&lt;br /&gt;
&amp;lt;/strike&amp;gt; Zugefügt zu Artikel [[SWAP]] --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 10:51, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Pfade innerhalb der FHEM Installation ====&lt;br /&gt;
&lt;br /&gt;
Die Module befinden sich wie gewohnt im Installationsverzeichnis unter ./FHEM.&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Das entsprechende Device Description File liegt unter ./FHEM/lib/SWAP wie hier beschrieben [http://forum.fhem.de/index.php/topic,12487.msg86257.html#msg86257].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In [[SWAP]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Register ===&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt-Id&#039;&#039; gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In [[SWAP]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Verwendung innerhalb FHEM ===&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[panStamp]] &amp;lt;nowiki&amp;gt;[[panStick]]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Zu unterscheiden ist die Definition des &amp;quot;Panstick&amp;quot;, wobei der panStamp, der als RF-Modem auf dem Panstick sitzt, gemeint ist. Dieser wird im Folgenden mit &amp;quot;Panstick&amp;quot; als Name des Device benannt . Der Type ist &amp;quot;panstamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite gibt es die Definition der panStamps, die lokal auf den entsprechenden Boards stecken. Diese sind vom Type SWAP_&amp;lt;ProductCode&amp;gt;. Um die Verwirrung komplett zu machen, wird hier meistens vom &amp;quot;panStamps&amp;quot; gesprochen, obwohl es eigentlich SWAP-Devices sind. Für diese werden hier nur die allgemeinen Grundfunktionen beschrieben, die bei jedem SWAP-Device funktionieren. Die spezifischen Komandos und Attribute, die durch die 3. Modulebene in Abhängigkeit des Productcode zur Verfügung stehen, werden bei den spezifischen Anwendungen beschrieben. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In [[panStamp]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:08, 19. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Panstick ====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
===== Definition =====&lt;br /&gt;
Das Device &amp;quot;Panstick&amp;quot; wird derzeit (01.05.2015) nicht durch autocreate angelegt. Daher muss er manuell entsprechend folgendem Befehl angelegt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define panStick panStamp /dev/ttyUSBx@38400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schnittstelle muss entsprechend der Installation des Pansticks anzupassen werden. Für die Einrichtung des Pansticks innerhalb des OS siehe [[panStamp#unter Linux|Installation Panstick]]&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann alle panStamps im Netz zu finden und per autocreate anzulegen, wenn dieses aktiv sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Betrieb an der FB&#039;&#039;&#039;&lt;br /&gt;
Spezialitäten zum Betrieb an einer Fritzbox sind hier [http://forum.fhem.de/index.php/topic,12487.msg87778.html#msg87778] und hier [http://forum.fhem.de/index.php/topic,12487.msg95914.html#msg95914] beschrieben. Es scheint nur der hintere USB-Anschluss für die Verwendung zu laufen. Außerdem muss der USB-Fernaschluss deaktiviert sein.&lt;br /&gt;
&lt;br /&gt;
===== Attribute =====&lt;br /&gt;
&lt;br /&gt;
Für den &amp;quot;Panstick&amp;quot; gibt es keine modulspezifischen Attribute.&lt;br /&gt;
&lt;br /&gt;
===== Set =====&lt;br /&gt;
&lt;br /&gt;
* discover?&lt;br /&gt;
Mit diesem Befehl wird eine Broadcast SWAP-Message abgesetzt, die alle empfangenden panStamps dazu veranlassen, sich zu melden. Batteriebetriebenen panStamps können systembedingt nur identifiziert werden, wenn diese Empfangsbereit sind und sich nicht im Schlafmodus befinden.&lt;br /&gt;
&lt;br /&gt;
* raw&lt;br /&gt;
Ist der Panstick ersteinmal eingerichtet und meldet &amp;quot;Initialized&amp;quot;, kann über das panStick device direkt eine raw Message abgesetzt werden. Diese ist zur Zeit eigentlich immer eine SWAP Nachricht wie z.b. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set panStick raw 00010000010000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In diesem Beispiel wird ein broadcast an alle abgesetzt, damit diese ihre ID und ihren productcode zurück senden.&lt;br /&gt;
Das macht der panStick nach dem Initialisieren auch ein mal automatisch um alle nicht schlafenden Devices per autocreate anlegen zu können.&lt;br /&gt;
&lt;br /&gt;
Mit diesem Befehl &amp;quot;raw&amp;quot; lassen sich SWAP-Messages direkt absetzten, was vor allen Dingen dann hilfreich sein kann, wenn man vermutet, dass die Kommunikation über die modulgestützten Befehle fehlschlägt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[panStamp]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 20:05, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== SWAP ====&lt;br /&gt;
&lt;br /&gt;
Alle empfangen SWAP Nachrichten werden in internals/readings im jeweiligen Device angezeigt.&lt;br /&gt;
&lt;br /&gt;
===== Definition =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme sollte autocreate aktiviert sein, da dies die Einrichtung deutlich vereinfacht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wenn der panStick läuft, sollten die SWAP-Devices per autocreate angelegt werden, sobald sie das erste mal senden, z.B. nach dem Einschalten oder nach einem Reset.&lt;br /&gt;
&lt;br /&gt;
Normalerweise werden beim autocreate alle Werte abgefragt und angezeigt. Das geht normalerweise ohne jedes Zutun. &lt;br /&gt;
&lt;br /&gt;
Panstick rein -&amp;gt; broadcast -&amp;gt; discovery -&amp;gt; anlegen. &lt;br /&gt;
&lt;br /&gt;
Bei Devices mit power down mode erfolgt dieses das erste mal wenn sie Strom haben. &lt;br /&gt;
&lt;br /&gt;
Alle panStamps durchlaufen beim Starten eine bestimmte Einschaltsequenz. Sie melden sich mit ihrer ID und ihrem productcode. Die ID ist die device Addresse und bei einem frisch geflashten panStamp in der Regel FF. Das SWAP Modul versucht, ein Device mit der Default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, sonst haben mehrere die gleiche Addresse und das gibt Konflikte. &lt;br /&gt;
&lt;br /&gt;
Wer mehrere devices hat, sollte jedem nach dem Anlegen mit &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
eine eigene id zuweisen. Die landen auf dem panStamp im EEPROM und sind auch nach Neustart noch vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die anderen Adressen sind wie folgt belegt:&lt;br /&gt;
* 00 ist die Broadcast-ID&lt;br /&gt;
* 01 ist die ID des Pansticks am FHEM-System&lt;br /&gt;
* FF ist die Default ID, die jeder panStamp im Auslieferungszustand besitzt&lt;br /&gt;
* F0-FE sind die IDs, auf die autocreate die Adresse automatisch ändert, wenn ein neuer mit der ID FF erkannt wird und kein entsprechender Device-Name definiert ist.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic= 12487 |Message=87261 }}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=12487.msg87261#msg87261]&lt;br /&gt;
&lt;br /&gt;
Ändert man die Adresse, dauert es einen Augenblick, bis alle Register neu übertragen worden sind. &lt;br /&gt;
&lt;br /&gt;
Autocreate ändert bei der Einrichtung und Änderung der ID auch automatisch den Namen. Belässt man die ID im Bereich F0-FE und ändert den Namen des Device, ist zu berücksichtigen, dass autocreate für neue Devices eine freie neue Adresse anhand der Device-Namen sucht. Dadurch könnte es zu Doppeltverwendung von IDs kommen.&lt;br /&gt;
&lt;br /&gt;
Alternativ zum autocreate kann man ein Device auch von Hand anlegen mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;device&amp;gt; SWAP &amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bis allerdings der Productcode nicht per Attribut hinterlegt ist, was bei autocreate ebenfalls automatisch geschied, funktionieren nur die grundlegenden Funktionen bis zur 2. Modulebene.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]] --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 10:51, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== set =====&lt;br /&gt;
&#039;&#039;ZUGEFÜGT ZU SWAP ARTIKEL, STRIKE FUNKTIONIERT ABER IN DIESEM ABSATZ NICHT&#039;&#039;&lt;br /&gt;
Ist ein SWAP-Device definiert, stehen folgende set-Befehle zur Verfügung:&lt;br /&gt;
* regGet &amp;lt;reg&amp;gt;&lt;br /&gt;
Fragt den Wert des Registers mit der id &amp;lt;reg&amp;gt; ab. Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
{{Link2Forum|Topic= 12487 |Message=87679 }}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg87679.html#msg87679]&lt;br /&gt;
&lt;br /&gt;
* regSet &amp;lt;reg&amp;gt; &amp;lt;data&amp;gt;&lt;br /&gt;
Schreibt &amp;lt;data&amp;gt; in den Register mit der id &amp;lt;reg&amp;gt;. Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
* regSet &amp;lt;reg&amp;gt;.&amp;lt;ep&amp;gt; &amp;lt;data&amp;gt;&lt;br /&gt;
write &amp;lt;data&amp;gt; to endpoint &amp;lt;ep&amp;gt; of register &amp;lt;reg&amp;gt;. will not work if no reading for register &amp;lt;reg&amp;gt; is available as all nibbles that are not part of endpoint &amp;lt;ep&amp;gt; will be filled from this reading. ?&lt;br /&gt;
&lt;br /&gt;
* statusRequest&lt;br /&gt;
Veranlasst, dass alle Register und deren Werte einmal übertragen werden.&lt;br /&gt;
&lt;br /&gt;
* readDeviceXML&lt;br /&gt;
Liest das Device-Description-XML-File neu ein.&lt;br /&gt;
&lt;br /&gt;
* clearUnconfirmed&lt;br /&gt;
Löscht die liste der unbestätigten Nachrichten.&lt;br /&gt;
&lt;br /&gt;
* flash [&amp;lt;productCode&amp;gt;|&amp;lt;firmwareFile&amp;gt;]&lt;br /&gt;
Initiiert das „over-the-air“ Firmware update, dass (derzeit) nur von NRG panStamps unterstützt wird.&lt;br /&gt;
* ohne Parameter: Verwendet das SWAP_&amp;lt;current productCode&amp;gt;.hex-File aus dem Verzeichnis ./FHEM/firmware.&lt;br /&gt;
* &amp;lt;productCode&amp;gt;: Verwendet das SWAP_&amp;lt;productCode&amp;gt;.hex-File aus dem Verzeichnis ./FHEM/firmware.&lt;br /&gt;
* &amp;lt;firmwareFile&amp;gt;: Verwendet ein &amp;lt;firmwareFile&amp;gt; als absoluten File-Namen des HEX-Files.&lt;br /&gt;
&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]] --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 10:51, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== get =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* regList&lt;br /&gt;
Listet alle User-Register des SWAP-Device (Readings). &lt;br /&gt;
&lt;br /&gt;
* regListAll&lt;br /&gt;
Listet alle Register des SWAP-Device (Internals und Readings). &lt;br /&gt;
&lt;br /&gt;
* listUnconfirmed&lt;br /&gt;
Listet alle unbestätigten Nachrichten in der Warteschlange.&lt;br /&gt;
&lt;br /&gt;
* products&lt;br /&gt;
Gibt alle auf dem System bekannten Productcodes nebst Daten aus.&lt;br /&gt;
&lt;br /&gt;
* deviceXML&lt;br /&gt;
Gibt die Daten des zum derzeit zum per Attribut (Productcode) eingerichteten Device-XML-Files aus.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]] --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 10:51, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Attribute =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Wird der Productcode bei der Definition nicht gesetzt, stehen auch nur die Standardbefehle bei zur 2. Modulebene zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
* createUnknownReadings&lt;br /&gt;
Erzeug Readings auch für Register, die im Device-XML-File nicht definiert werden.&lt;br /&gt;
&lt;br /&gt;
* ProductCode&lt;br /&gt;
Legt den ProductCode eines SWAP-Device fest. Dieses Attribut wird dazu benutzt, die Konfiguration vom Device-XML-File festzulegen. &lt;br /&gt;
Erst wenn der Produktcode als Attribut vorgegeben wurde, z.B. für einen RGB-Sktech:&lt;br /&gt;
attr &amp;lt;device&amp;gt; ProductCode 0000002200000003&lt;br /&gt;
kommen zu den allgemeinen Kommandos die spezifischen der nächst höheren Modulebene 35_SWAP_&amp;lt;productcode&amp;gt;.pm mit hinzu. Dann werden die SWAP-Nachrichten an das entsprechende Modul weitergegeben und dort verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices, die während der Definition nicht aktiv sind, muss dieses Attribut manuell angelegt werden.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]] --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 10:51, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== SWAP_&amp;lt;ProductCode&amp;gt; ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Ist bei einem SWAP-Device das Attribut Productcode gesetzt, wird die SWAP-Nachricht an das entsprechende Modul der 3. Ebene weitergegeben und dort verarbeitet. Die spezifischen Kommandos und Attribute sind bei den entsprechenden [[panStamp#Explizite Anwendungen|Anwendungen]] näher beschrieben.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Intervall bei Sketch mit power down / batterie betriebene Panstamps ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Devices mit power down mode durchlaufen beim Einschalten oder bei einem Reset eine 3 Sekunden Schleife und warten auf Kommandos, dann werden normaler Weise die Register mit den Sensorwerten gesendet und die normale Loop gestartet. power down devices gehen danach schlafen und wachen regelmässig auf um ihre Werte zu senden.&lt;br /&gt;
Alternativ zum Intervall kann man den Resetknopf drücken, wenn man sie nicht im Zugriff hat. &lt;br /&gt;
&lt;br /&gt;
Nachrichten an ein Device im power-down-state werden gepuffert und dann an das Device geschickt, sobald dieses sich im SYNC status befindet. Dieses ist typischer Weise nach dem Startup z.B. nach einem Reset der Fall.&lt;br /&gt;
&lt;br /&gt;
Bei batteriebetriebenen Sensoren sollte das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87409}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=12487.msg87409#msg87409]&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall bei der Einrichtung automatisch von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden = 15 Minuten) geändert.&lt;br /&gt;
&lt;br /&gt;
Das Intervall wird nur automatisch gesetzt, wenn pwrdownmode im device description file true ist.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=89205}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg89205.html#msg89205]&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=157125}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg157125#msg157125]&lt;br /&gt;
&lt;br /&gt;
Es gibt mit bestimmten panStamp lib Versionen das Problem das ein Wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panStamp so schnell sendet, dass fhem so mit dem Abarbeiten beschäftigt ist, dass es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panStamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87859}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg87859.html#msg87859]&lt;br /&gt;
&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die automatisch vergebenen Adressen sind im Bereich F0-FE. d.h. eigentlich auch nur temporär und sollten auf eine lokal passende geändert werden.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87919}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg87919.html#msg87919]&lt;br /&gt;
&lt;br /&gt;
Im Log sollte etwas in dieser Art auftauchen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP Unknown device FF, please define it&lt;br /&gt;
2013.07.29 20:14:29 2: autocreate: define SWAP_F0 SWAP FF 000000010000000E&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP_F0: I/O device is panStamp&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP SWAP_F0: changing 09-DeviceAddress from default FF to F0&lt;br /&gt;
2013.07.29 20:14:30 3: SWAP SWAP_F0: changing 0A-PeriodicTxInterval from default FFFF to 0384 (900 seconds)&lt;br /&gt;
&lt;br /&gt;
2013.07.29 20:16:35 3: SWAP Unknown device FF, please define it&lt;br /&gt;
2013.07.29 20:16:35 2: autocreate: define SWAP_F1 SWAP_0000002200000003 FF 0000002200000003&lt;br /&gt;
2013.07.29 20:16:35 3: SWAP_F1: I/O device is panStamp&lt;br /&gt;
2013.07.29 20:16:36 3: SWAP SWAP_F1: changing 09-DeviceAddress from default FF to F1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zugefügt zu Artikel [[SWAP]]. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
==== Verschlüsselung ====&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung der Verschlüsselung für die Kommunikation zwischen panStamp und panStick ist hier beschrieben, scheint allerdings derzeit noch nicht eingecheckt zu sein (Stand 01.05.2015).&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=133040}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg133040.html#msg133040]&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=139341}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg139341.html#msg139341]&lt;br /&gt;
&lt;br /&gt;
=== Trouble Shooting ===&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
==== value has to be 10 byte(s) in size  ====&lt;br /&gt;
&lt;br /&gt;
Es besteht die Möglichkeit, dass die Internals aus irgend einem Grund nicht vollständig sind. &lt;br /&gt;
Abhilfe in einem solchen Falle kann das Absetzen der folgenden beiden Befehlt schaffen&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
set &amp;lt;device&amp;gt; statusRequest&lt;br /&gt;
set &amp;lt;device&amp;gt; readDeviceXML&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das nicht zum Erfolg führt, hilft ggf. ein Löschen und neu setzen des ProductCode Attributs.&lt;br /&gt;
{{Link2Forum|Topic=34474.0}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=34474.0]&lt;br /&gt;
&lt;br /&gt;
Das Übertragen aller Daten nach dem Statusrequest kann einen Augenblick dauern.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit:&lt;br /&gt;
Die Fehlermeldung kommt immer wenn FHEM nicht weiss welche Firmware auf dem device ist. Das passiert wenn irgendetwas in der Kommunikation schief geht während FHEM initialisiert.&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=122414}} &lt;br /&gt;
[http://forum.fhem.de/index.php/topic,13890.msg122414.html#msg122414]&lt;br /&gt;
&lt;br /&gt;
==== register 0F is not known ====&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=84257}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg84257.html#msg84257]&lt;br /&gt;
&lt;br /&gt;
==== Komplette Übersicht eines Device ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
list &amp;lt;device&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201467}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg201467#msg201467]&lt;br /&gt;
&lt;br /&gt;
==== fehlender oder falsche Productcode ====&lt;br /&gt;
&lt;br /&gt;
Fehlt der Productcode, werden die zum Sketch zugehörigen Befehle nicht angezeigt und die Register nicht korrekt zugeordnet.&lt;br /&gt;
Verändert man den Productcode, sollte man im Anschluss folgenden Befehlt absetzten, um alle Register neu auszulesen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;device&amp;gt; statusRequest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201910}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg201910#msg201910]&lt;br /&gt;
&lt;br /&gt;
==== missing commands und register 00-0A unvollständig ====&lt;br /&gt;
&lt;br /&gt;
Wenn in den Internals missing commands (SWAP_Sent_unconfirmed) auftauchen und ggf. die Register 00-0A nicht vollständig sind und das Internal &amp;quot;channels&amp;quot; nicht vorhanden ist, gibt es irgendein Kommunikationsproblem.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201939}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg201939#msg201939]&lt;br /&gt;
&lt;br /&gt;
==== Funktion des Autocreate ====&lt;br /&gt;
&lt;br /&gt;
Beim autocreate wird versucht ein Name für das Device zu vergeben, der zur nächsten freien Adresse passt. Während dieses Prozessen bleibt die Adresse erst mal trozdem FF. Erst wenn das Device angelegt wird, kann versucht werden automatisch die Adresse zu setzen, hoffentlich auf die gleiche freie, die beim Namen auch schon gefunden wurde. &lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=88110}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg88110.html#msg88110]&lt;br /&gt;
&lt;br /&gt;
==== Adresse manuell setzen ====&lt;br /&gt;
&lt;br /&gt;
Um die Adresse manuell bereits in den Sketch einzubauen kann man wie hier beschrieben vorgehen.&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=122347}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,13890.msg122347.html#msg122347]&lt;br /&gt;
&lt;br /&gt;
==== Panstamp antwortet nicht/EEprom to factory defaults ====&lt;br /&gt;
&lt;br /&gt;
Wenn der panStamp nicht antwortet, kann es sein das die Adressen durcheinander gekommen sind. Dann musst man einmal in setup() ein  eepromToFactoryDefaults() aufrufen und damit flashen. Wenn damit einmal gestartet wurde, die Zeile wieder entfernen und den normalen sketch flashen. &lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=121677}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg121677#msg121677]&lt;br /&gt;
&lt;br /&gt;
==== Undefined subroutine &amp;amp;main::XMLin ====&lt;br /&gt;
Erhält man diese Fehlermeldung&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Undefined subroutine &amp;amp;main::XMLin called at ./FHEM/34_SWAP.pm line 108.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013.09.26 11:34:24 0: ERROR: Cannot autoload SWAP&lt;br /&gt;
2013.09.26 11:34:24 3: panStick: Unknown code 000A001B000A000000000100000007, help me!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt XML::Simple, was folgendermaßen installiert werden kann:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-simple-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Factory Defaults ====&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp auf den Auslieferungszustand zurückzusetzen, muss man beim Sketch folgendes in die setup() Routine einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eepromToFactoryDefaults()&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=157125}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg157125#msg157125]&lt;br /&gt;
&lt;br /&gt;
==== Status LED ====&lt;br /&gt;
&lt;br /&gt;
Die Status LED auf dem Board wird in der config.h deaktiviert, indem man die Zeit #define LED_DEBUG mit &amp;quot;//&amp;quot; auskommentiert.&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=164731}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,13890.msg164731.html#msg164731]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 21:00, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Explizite Anwendungen ==&lt;br /&gt;
=== RGB-Board ===&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
&lt;br /&gt;
Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. Eine Version 2 des Boards in geplant. &lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die derzeit vorhandene Funktionalität (stand 01.05.2015):&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=1205404}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg120404#msg120404]&lt;br /&gt;
&lt;br /&gt;
* bis zu vier LED-Kanäle (je nach Kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* Messen ob die LED-Versorgung an ist.&lt;br /&gt;
* Helligkeit eines an A2 angeschlossenen Helligkeitssensors&lt;br /&gt;
* Konfiguration der DMX-Basis-Adresse über das SWAP Register 0x12&lt;br /&gt;
* optional soft on auf letzten Wert&lt;br /&gt;
* Alles was auch vorher schon ging: dimmen, faden, IR-Fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
Wichtig zu wissen:&lt;br /&gt;
* Wenn IR aktiv ist und kein soft pwm lässt sich der 4. Kanal nur ein- und ausschalten.&lt;br /&gt;
* Wenn IR aktiv ist muss soft pwm aktiv sein um den 4. Kanal auch zu dimmen.&lt;br /&gt;
* Es wird nur ein zusätzlicher Kanal tatsächlich schon unterstützt, der fünfte ist noch geplant.&lt;br /&gt;
* Bei IR-Senden sind nur die Aufrufe für Sony und NEC tatsächlich eingebaut. Die anderen sind aber einfach zu ergänzen.&lt;br /&gt;
* Beim IR-Senden sind noch keine Wiederholungen eingebaut. Die müssen laut Protokoll aber eigentlich sein.&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr Konfiguration bezüglich default-Verhalten. Ramp-Zeiten, Delays, ...&lt;br /&gt;
* HSV-Farb-Modell um besser zu faden und vor Allem um den Weiss-Anteil automatisch auf die Weiss-LEDs zu legen&lt;br /&gt;
* die virtuellen Channel &lt;br /&gt;
* FHEM kompatibles IR-Senden&lt;br /&gt;
* sofortiges senden von Helligkeit und LED-Spannung bei Änderung&lt;br /&gt;
* andere IR-Lib mit sehr viel besserer Geräte-Unterstützung&lt;br /&gt;
&lt;br /&gt;
Wie gehabt muss alles über config.h mit Compilerschaltern konfiguriert werden.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[SWAP_0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== original RGB-Sketch (von panstamp.com) =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Der originale Sketch von der panStamp.com-Seite und das generelle FHEM-Modul verstehen von Haus aus nur die regSet und regGet Kommandos. Wenn man den colorpicker verwenden möchte, geht das nur per readingsProxy. &lt;br /&gt;
&lt;br /&gt;
Das einfachste ist es den Sketch und das FHEM-Modul für das RGB-Board zu verwenden. Dann hat man neben dem colorpicker, einem farbigen State-Icon auch alle Möglichen Kommandos wie on, off, on-for-timer, dimup, ... und kann konfigurieren, wie das Board nach dem Hart- oder Soft-Einschalten reagieren soll. &lt;br /&gt;
&lt;br /&gt;
Derzeit scheint es keinen Grund zu geben, den original Sketch zu verwenden. &lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=220463}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg220463.html#msg220463]&lt;br /&gt;
&lt;br /&gt;
Falls jemand trotzdem den normalen RGB-Sketch verwendet:&lt;br /&gt;
* Im Code alle drei 0000002200000003 durch 0000000100000003 ersetzen.&lt;br /&gt;
Dann geht on/off/toggle/set rgb RRGGBB und auch der colorpicker, wenn das HUEDevice Modul auch geladen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP_0000002200000003#Anwendungsbeispiele]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 13:58, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Sketch vorbereiten, kompilieren und hochladen ====&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
(Stand 01.05.2015)&lt;br /&gt;
&lt;br /&gt;
Mit der Arduino IDE 1.5.x gab es gundlegende Umstellungen, für die der derzeitige Sketch [r4716] vermutlich angepasst werden müsste.&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;Panstamp Lib&#039;&#039;&#039; läd man von hier [[http://old.panstamp.com/downloads]] (panstamp_library.zip, 129k v.25, May 31, 2013). Mit der neueren Lib v.4 läuft die Kompillierung des derzeitigen Sketches nicht durch. Die Dateien der Lib speichert man in einem entsprechend neuen  Unterordner, z.B. hierin C:\Users\&amp;lt;username&amp;gt;\Documents\Arduino\libraries. Am Ende der ganzen Aktion im Folgenden sollten sich in diesem Unterordner 3 neue Unterordner befinden: IRremote, DMXSerial und panstamp&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;IR Remote Lib&#039;&#039;&#039; kopiert man von hier [[https://github.com/shirriff/Arduino-IRremote]] und speichert sie ebenfalls in einem passenden Unterordner von libraries.&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;DMX Lib&#039;&#039;&#039; kopiert man von hier [[http://www.mathertel.de/Arduino/DMXSerial.aspx]] und speichert sie ein weiteres Mal in einem weiteren Unterordner von libraries. Weitere Informationen zur Verwendung von Arduino Libraties finden sich hier [[http://arduino.cc/en/Hacking/Libraries]]. Dass die Libraries richtig erkannt worden sind, lässt sich dadurch erkennen, dass unter Sketch/Library importieren die 3 weiteren Punkte unten unter &amp;quot;beigetragen&amp;quot; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries Verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Für das kompilieren mit INO siehe [[panStamp#ino|hier]].&lt;br /&gt;
&lt;br /&gt;
===== Link zum sketch =====&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201391}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg201391#msg201391]&lt;br /&gt;
&lt;br /&gt;
===== Kompillierte hex version =====&lt;br /&gt;
Eine kompiliertes HEX-File für drei (vier) Kanäle plus IR-Empfang und DMX ist hier im Forum zu finden:&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=121619}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg121619#msg121619]&lt;br /&gt;
&lt;br /&gt;
===== HEX-File ohne IR und DMX =====&lt;br /&gt;
Eine kompiliertes HEX-File ohne IR-Empfang und DMX ist hier im Forum zu finden:&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201955}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg201955#msg201955]&lt;br /&gt;
&lt;br /&gt;
===== Sketch anpassen, kompilieren und hochladen =====&lt;br /&gt;
&lt;br /&gt;
* Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen. {{Link2Forum|Topic=13890 |Message=173431}} [http://forum.fhem.de/index.php?topic=13890.msg173431#msg173431] Den Sketch entsprechend den Bedürfnissen in den config.h die nicht benötigten Zeilen mit &amp;quot;//&amp;quot; auskommentieren bzw. anpassen. Für die Konfigurationen siehe [[panStamp#Sketch konfigurieren|Sketch konfigurieren]].&lt;br /&gt;
* Windows IDE only: Falls alles so bleibt, wie es heruntergeladen wurde, wechselt man wieder auf den Reiter sketch und importiert über -&amp;gt;Sketch Library importieren die entsprechenden Libs für IRremote und DMX. Dadurch werden 3 neue Zeilen hinzugefügt.&lt;br /&gt;
* Nun sollte über Sketch/Überprüften/Kompillieren die Erstellung des Sketches möglich sein.&lt;br /&gt;
* Falls erfolgreich unter Datei/Hochladen (ohne Programmer) den Sketch auf den Panstamp laden.&lt;br /&gt;
&lt;br /&gt;
==== Sketch konfigurieren ====&lt;br /&gt;
 &lt;br /&gt;
===== DMX =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define ENABLE_DMX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Temperatur- und Luftfeuchtigkeitssensor =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define HAS_SENSOR&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit.&lt;br /&gt;
&lt;br /&gt;
Dafür sollten diese Konfigurationszeilen auskommentiert  sein&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des panStamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Umrechnung der Userreading für Spannung Temp etc. ist hier beschrieben.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=76489}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=12487.msg76489#msg76489]&lt;br /&gt;
&lt;br /&gt;
===== Zusammenhänge der Konfiguration =====&lt;br /&gt;
&lt;br /&gt;
Die Zusammenhänge der Konfiguration sind hier beschrieben&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=175181}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg175181#msg175181]&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt in Artikel [[PanStamp RGBWW Board mit DMX und IR]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== Bedienung in FHEMWEB ====&lt;br /&gt;
&lt;br /&gt;
===== Komandos =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Definition ======&lt;br /&gt;
&lt;br /&gt;
Der Panstick wird entsprechend folgendem Befehlt angelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define panStick panStamp /dev/ttyUSBx@38400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schnittstelle ist entsprechend Installation des &amp;lt;nowiki&amp;gt;[[panstamp#unter Linux|Pansticks]]&amp;lt;/nowiki&amp;gt; anzupassen.&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann alle panStamps im Netz zu finden und per autocreate anzulegen, wenn dieses aktiv ist.&lt;br /&gt;
&lt;br /&gt;
====== Attribute TBC ======&lt;br /&gt;
&lt;br /&gt;
====== Set TBC ======&lt;br /&gt;
&lt;br /&gt;
====== Get TBC ======&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=12487.msg81923#msg81923&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
EIn register verändern&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,12487.msg87679.html#msg87679&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Register umrechnung dec zu hex TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg162790.html#msg162790&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Poweronstate TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,12487.msg88054.html#msg88054&lt;br /&gt;
http://forum.fhem.de/index.php/topic,12487.msg95574.html#msg95574&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg124456.html#msg124456&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Aus nach poweron TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg121296#msg121296&lt;br /&gt;
Power on register&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg121137#msg121137&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== listunconfirmed TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,12487.msg88112.html#msg88112&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; In Artikel [[SWAP]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Fadeto TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,12487.msg97406.html#msg97406&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Default fade time&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg121572#msg121572&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Eigenschaften des fade TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg106644#msg106644&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== 4.,5. kanal TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg169741#msg169741&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg192132#msg192132&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg201922#msg201922&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg201936#msg201936&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
===== Extra kanäle TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP_0000002200000003]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg173280#msg173280&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg214329#msg214329&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg214474#msg214474&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; Inhalt in Artikel [[SWAP 0000002200000003]] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 14:25, 28. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
==== IR Schnittstelle TBC ====&lt;br /&gt;
===== IR TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107061#msg107061&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107197#msg107197&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107415#msg107415&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg122021.html#msg122021&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg122077.html#msg122077&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg167351#msg167351&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175269#msg175269&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175285#msg175285&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg182582#msg182582&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg245597#msg245597&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg259267#msg259267&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== IR-Belegung Panstamp RGB-Board TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg163008.html#msg163008&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg163153.html#msg163153&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ircluster TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175331#msg175331&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Irgate TBC =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175278#msg175278&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DMX Schnittstelle ====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Da die DMX-Schrittstelle kein direktes Interface zu FHEM hat, sondern nur die direkte Kommunikation zwischen DMX-Kontroller und RGB-Board betrifft, ist die Schnittstelle nur bei der Konfiguration des Sketches und über die Dokumentation des Boards beschrieben.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
==== sonstiges ====&lt;br /&gt;
&lt;br /&gt;
===== Alternativer Fade per Patch =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Als Alternative zum im Sketch und im Modul eingebauten Fade-Befehl ist hier ein Patch vorgestellt:&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=133096}} &lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg133096.html#msg133096]&lt;br /&gt;
&lt;br /&gt;
Der Patch ist &#039;&#039;&#039;nicht eingecheckt&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
===== Kompatibilität RBG-Board mit NRG-panStamps =====&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[PanStamp_RGBWW_Board_mit_DMX_und_IR]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Mit dem hier beschriebenen Sketch ist das Board nur mit den AVRs kompatibel.&lt;br /&gt;
Die Pinbelegung zwischen AVR und NRG ist im Prinzip gleich bis auf Pin 23. Das ist bei dem NRG ein IO Pin und nicht Ground wie beim AVR. &lt;br /&gt;
Das wäre kein Problem wenn man entweder hardwareseitig den Kontakt unterbricht oder aber programmiertechnisch diesen Pin &#039;&#039;&#039;NIE&#039;&#039;&#039; als Ausgang definiert. Ansonsten gibt’s ein „kurzen“. Oder wenn er als Ausgang definiert ist darf er nur das GND Potential haben, also Low, 0.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=247069}}&lt;br /&gt;
[http://forum.fhem.de/index.php?topic=13890.msg247069#msg247069]&lt;br /&gt;
&lt;br /&gt;
Da es derzeit (Stand 01.05.2015) aber keinen Sketch gibt, der auf den NRG lauffähig ist, wäre vorher noch diese Herausforderung zu lösen.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:54, 17. Jul. 2015 (CEST)&lt;br /&gt;
=== Bodenfeuchtesensor ===&lt;br /&gt;
{{Randnotiz|RNText=In Artikel [[SWAP]]}}&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Ein Artikel über ein selbstentwickeltes PanStamp Batterieboard zum Anschluss von Analogsensoren/1Wire und Solarversorgung ist hier [[Bodenfeuchtesensor]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an panStamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an panStamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine panStamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Artikel [[SWAP] übernommen. --[[Benutzer:TeeVau|TeeVau]] ([[Benutzer Diskussion:TeeVau|Diskussion]]) 23:59, 18. Jul. 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Umweltsensor ===&lt;br /&gt;
&amp;lt;strike&amp;gt; &lt;br /&gt;
Die Weiterentwicklung des Bodenfeuchtesensors zum Umweltsensor ist hier [[PanStamp_Umweltsensor]] beschrieben.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ultraschall-Füllstandssensor ===&lt;br /&gt;
&lt;br /&gt;
Projektidee&lt;br /&gt;
&lt;br /&gt;
=== Repeater Mode ===&lt;br /&gt;
&lt;br /&gt;
Die Repeaterfunktionalität ist derzeit (01.05.2015) noch nicht näher beschrieben, wird aber von den Modulen unterstützt.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=118403}}&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg118403.html#msg118403]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SWAP&amp;diff=15554</id>
		<title>SWAP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SWAP&amp;diff=15554"/>
		<updated>2016-06-12T15:19:55Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Link zu panStick ersetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:SWAP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Modul zur generischen Ansteuerung sämtlicher panStamp Boards.&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=SWAP&lt;br /&gt;
|ModForumArea=&lt;br /&gt;
|ModFTopic=&lt;br /&gt;
|ModTechName=34_SWAP.pm&lt;br /&gt;
|ModOwner=André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[SWAP]] ist das Basismodul für die Unterstützung der panStamp Baugruppen. Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([https://github.com/panStamp/panstamp/wiki/Simple%20Wireless%20Abstract%20Protocol SWAP]).&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben. Für eine tiefgreifende FHEM Integration können weitere Module (wie z.B. [[SWAP_0000002200000003]]) vorhanden sein. Diese Module bauen, als 3. Ebene, auf das SWAP Modul (2. Ebene) auf und bedienen im backend ebenfalls die panStamp-Hardware über die Register. Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Für den Betrieb ist XML:Simple notwendig, dass bei Bedarf folgendermaßen nachinstalliert werden kann [http://forum.fhem.de/index.php?topic=12487.msg87373#msg87373].&lt;br /&gt;
 sudo apt-get install libxml-simple-perl&lt;br /&gt;
Diese Abhängigkeit kann beim Betrieb auf einer Fritzbox ebenfalls zu Problemen führen. Das [[SWAP]] Modul greift auf das [[panStamp]] Modul zu, was vorher per &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt; angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Bei SWAP geht alle Kommunikation über [https://github.com/panStamp/panstamp/wiki/Simple%20Wireless%20Abstract%20Protocol#registers-and-values &#039;&#039;&#039;Register&#039;&#039;&#039;], dies sind unterschiedlich lange Werte die entweder nur gelesen oder gelesen und geschrieben werden können.&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (&amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;0A&amp;lt;/code&amp;gt;) [https://github.com/panStamp/panstamp/wiki/Standard-SWAP-registers] und beliebig viele, sketchabängige Userregister (&amp;lt;code&amp;gt;0B&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;xx&amp;lt;/code&amp;gt;) [https://github.com/panStamp/panstamp/wiki/Standard-SWAP-registers#custom-registers] bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Definition Files&#039;&#039;, die in &amp;lt;code&amp;gt;.../FHEM/lib/SWAP&amp;lt;/code&amp;gt; zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Definition File erfolgt über den ProductCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-ID [https://github.com/panStamp/panstamp/wiki/How-to-develop-your-own-SWAP-device#specify-your-product-code] gebildet wird. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
In den Systemregistern  steht z.B. der ProductCode, die Device Adresse im SWAP Protokoll und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert und die Werte gehen auch beim Neustart nicht verloren. Beim aller ersten Starten ist das EEPROM mit &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; initialisiert und alle konfigurierbaren Register haben diesen Wert. Also z.B. Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; und Intervall &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; (HEX in Sekunden, das wären dann zwischen 18 und 19 Stunden).&lt;br /&gt;
Die Inhalte der Systemregister stehen als INTERNAL, im oberen Bereich der Detail Ansicht eines FHEM-Device, in FHEMWEB, die Userregister als Readings im unteren.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen ProductCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
Alle low Level Dinge wie Register ID oder Register Wert können mit &#039;&#039;&#039;hex Werten&#039;&#039; direkt angepasst werden.&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in Sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 08 &amp;lt;Netzwerk ID als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87436 }}&lt;br /&gt;
&lt;br /&gt;
Das [[SWAP]]-Modul stellt unter anderem folgende grundlegende Funktionalitäten zur Verfügung&lt;br /&gt;
* Es wird eine command Queue für panStamp-Hardware im power down Modus gehalten. Sobald die panStamp-Hardware online (SYNC Modus) kommt werden die Kommandos von FHEM automatisch übertragen.&lt;br /&gt;
* Die userReadings für &#039;menschenlesbare&#039; Readings werden anhand des Device Definition Files automatisch erzeugt&lt;br /&gt;
* Es ist möglich direkt Endpoints (Teile eines Registers) zu schreiben&lt;br /&gt;
* (Fast) keine hardkodierte Sonderbehandlung mehr für das RGB-Board. Das SWAP Modul kann mit jedem beliebige Swap Device umgehen.&lt;br /&gt;
* Es gibt eine dritte (optionale) Modulebene neben dem [[panStamp]] FHEM-Modul (1. Ebene) für die Hardware und dem SWAP Modul (2. Ebene) für das Protokoll. Mit dem generellen SWAP Modul lasen sich alle SWAP Devices &#039;&#039;zu Fuß&#039;&#039; über die Register ansprechen. Um die Register auf einer höheren Ebene auf FHEM Kommandos wie on/off/on-for-timer zu mappen ist dann ein Modul der 3. Ebene notwendig. {{Link2Forum|Topic=12487 |Message=78502 }}&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme sollte autocreate aktiviert sein, da dies die Einrichtung deutlich vereinfacht.&#039;&#039;&#039;&lt;br /&gt;
Wenn der [[panStamp#panStick/Shield|panStick]] läuft, sollten die SWAP-Devices per autocreate angelegt werden, sobald sie das erste Mal senden, z.B. nach dem Einschalten oder nach einem Reset. Normalerweise werden beim autocreate alle Werte abgefragt und angezeigt. Das geht normalerweise ohne jedes Zutun. &lt;br /&gt;
&lt;br /&gt;
panStick rein -&amp;gt; broadcast -&amp;gt; discovery -&amp;gt; anlegen. &lt;br /&gt;
&lt;br /&gt;
Bei Devices mit power down Mode erfolgt dieses das erste Mal wenn sie Strom haben. &lt;br /&gt;
&lt;br /&gt;
Alle panStamps durchlaufen beim Starten eine bestimmte Einschaltsequenz. Sie melden sich mit ihrer ID und ihrem ProductCode. Die ID ist die SWAP Device Adresse und bei einem frisch geflashten panStamp in der Regel &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt;. Das SWAP Modul versucht, ein Device mit der Default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0 - FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, sonst haben mehrere die gleiche Adresse und das gibt Konflikte. &lt;br /&gt;
&lt;br /&gt;
Wer mehrere Devices hat, sollte jedem nach dem Anlegen mit &lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;Device Adresse als 2 stellige hex zahl&amp;gt; &lt;br /&gt;
eine eigene ID zuweisen. Die landen auf dem panStamp im EEPROM und sind auch nach Neustart noch vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die anderen Adressen sind wie folgt belegt:&lt;br /&gt;
* &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt; ist die Broadcast-ID&lt;br /&gt;
* &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt; ist die ID des panStick am FHEM-System&lt;br /&gt;
* &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; ist die Default ID, die jeder panStamp im Auslieferungszustand besitzt&lt;br /&gt;
* &amp;lt;code&amp;gt;F0-FE&amp;lt;/code&amp;gt; sind die IDs, auf die autocreate die Adresse automatisch ändert, wenn ein neuer mit der ID &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; erkannt wird und kein entsprechender Device-Name definiert ist.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic= 12487 |Message=87261 }}&lt;br /&gt;
&lt;br /&gt;
Ändert man die Adresse, dauert es einen Augenblick, bis alle Register neu übertragen worden sind. &lt;br /&gt;
&lt;br /&gt;
Autocreate ändert bei der Einrichtung und Änderung der ID auch automatisch den Namen. Belässt man die ID im Bereich &amp;lt;code&amp;gt;F0 - FE&amp;lt;/code&amp;gt; und ändert den Namen des Device, ist zu berücksichtigen, dass autocreate für neue Devices eine freie neue Adresse anhand der Device-Namen sucht. Dadurch könnte es zu Doppeltverwendung von IDs kommen.&lt;br /&gt;
&lt;br /&gt;
Alternativ zum autocreate kann man ein Device auch von Hand anlegen mit&lt;br /&gt;
 define &amp;lt;device&amp;gt; SWAP &amp;lt;ID&amp;gt;&lt;br /&gt;
Bis allerdings der ProductCode nicht per Attribut hinterlegt ist, was bei autocreate ebenfalls automatisch passiert, funktionieren nur die grundlegenden Funktionen bis zur 2. Modulebene.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
Ist ein SWAP-Device definiert, stehen folgende set-Befehle zur Verfügung:&lt;br /&gt;
* regGet &amp;lt;reg&amp;gt;&lt;br /&gt;
Fragt den Wert des Registers mit der ID &amp;lt;reg&amp;gt; ab. Für die Systemregister kann hierzu statt der Register ID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
{{Link2Forum|Topic= 12487 |Message=87679 }}&lt;br /&gt;
&lt;br /&gt;
* regSet &amp;lt;reg&amp;gt; &amp;lt;data&amp;gt;&lt;br /&gt;
Schreibt &amp;lt;data&amp;gt; in den Register mit der id &amp;lt;reg&amp;gt;. &amp;lt;data&amp;gt; muss als HEX Zahl angegeben werden. Für die Systemregister kann hierzu statt der Register ID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
* regSet &amp;lt;reg&amp;gt;.&amp;lt;ep&amp;gt; &amp;lt;data&amp;gt;&lt;br /&gt;
write &amp;lt;data&amp;gt; to endpoint &amp;lt;ep&amp;gt; of register &amp;lt;reg&amp;gt;. will not work if no reading for register &amp;lt;reg&amp;gt; is available as all nibbles that are not part of endpoint &amp;lt;ep&amp;gt; will be filled from this reading. ?&lt;br /&gt;
&lt;br /&gt;
* statusRequest&lt;br /&gt;
Veranlasst, dass alle Register und deren Werte einmal übertragen werden.&lt;br /&gt;
&lt;br /&gt;
* readDeviceXML&lt;br /&gt;
Liest das Device-Definition-XML-File neu ein.&lt;br /&gt;
&lt;br /&gt;
* clearUnconfirmed&lt;br /&gt;
Löscht die Liste der unbestätigten Nachrichten.&lt;br /&gt;
&lt;br /&gt;
* flash [&amp;lt;productCode&amp;gt;|&amp;lt;firmwareFile&amp;gt;]&lt;br /&gt;
Initiiert das „over-the-air“ Firmware update, dass (derzeit) nur von panStamps NRG unterstützt wird.&lt;br /&gt;
** ohne Parameter: Verwendet das SWAP_&amp;lt;current ProductCode&amp;gt;.hex-File aus dem Verzeichnis ./FHEM/firmware.&lt;br /&gt;
** &amp;lt;ProductCode&amp;gt;: Verwendet das SWAP_&amp;lt;ProductCode&amp;gt;.hex-File aus dem Verzeichnis ./FHEM/firmware.&lt;br /&gt;
** &amp;lt;firmwareFile&amp;gt;: Verwendet ein &amp;lt;firmwareFile&amp;gt; als absoluten File-Namen des HEX-Files.&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
* regList&lt;br /&gt;
Listet alle User-Register des SWAP-Device (Readings). &lt;br /&gt;
&lt;br /&gt;
* regListAll&lt;br /&gt;
Listet alle Register des SWAP-Device (Internals und Readings). &lt;br /&gt;
&lt;br /&gt;
* listUnconfirmed&lt;br /&gt;
Listet alle unbestätigten Nachrichten in der Warteschlange auf, also Nachrichten die von FHEM gesendet wurden, aber der Empfang durch das panStamp Modul nicht bestätigt wurde.&lt;br /&gt;
&lt;br /&gt;
* products&lt;br /&gt;
Gibt alle auf dem System bekannten Productcodes nebst Daten aus.&lt;br /&gt;
&lt;br /&gt;
* deviceXML&lt;br /&gt;
Gibt die Daten des zum derzeit zum per Attribut (ProductCode) eingerichteten Device-XML-Files aus.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Wird der ProductCode bei der Definition nicht gesetzt, stehen auch nur die Standardbefehle bei zur 2. Modulebene zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
* createUnknownReadings&lt;br /&gt;
Erzeug Readings auch für Register, die im Device-XML-File nicht definiert werden.&lt;br /&gt;
&lt;br /&gt;
* ProductCode&lt;br /&gt;
Legt den ProductCode eines SWAP-Device fest und liest dadurch das dazugehörige Device-Definition-XML-File ein. Erst wenn der ProductCode als Attribut vorgegeben wurde, z.B. für einen RGB-Sketch:&lt;br /&gt;
 attr &amp;lt;device&amp;gt; ProductCode 0000002200000003&lt;br /&gt;
kommen zu den allgemeinen FHEM set- und get-Kommandos des [[SWAP]] Modul die spezifischen der 3. Modulebene 35_SWAP_&amp;lt;productcode&amp;gt;.pm mit hinzu (Siehe z.B. [[SWAP_0000002200000003]]). Dann werden die SWAP-Nachrichten an das entsprechende Modul weitergegeben und dort verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices, die während der Definition nicht aktiv sind, muss dieses Attribut manuell angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Device Definition File ===&lt;br /&gt;
Mit Hilfe der im jeweiligen Device Definition File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt (Wenn den Endpoints eine Unit mit Factor zugewiesen ist) die neben den reinen Registerwerten in hex auch &#039;&#039;menschenlesbare&#039;&#039; readings der Sensorwerte erzeugen. &lt;br /&gt;
Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
Das entsprechende Device Definition File liegt unter ./FHEM/lib/SWAP wie hier beschrieben [http://forum.fhem.de/index.php/topic,12487.msg86257.html#msg86257].&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
attr temp press userReadings voltage:0B-Voltage.* {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature.* {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure.* {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure.* {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen Readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel ist das Definition File für das RGB-Board rgbdriver.xml.&lt;br /&gt;
&lt;br /&gt;
=== SWAP Register ===&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (&amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;0A&amp;lt;/code&amp;gt;) [https://github.com/panStamp/panstamp/wiki/Standard-SWAP-registers] und beliebig viele sketchabängige Userregister (&amp;lt;code&amp;gt;0B&amp;lt;/code&amp;gt; - &amp;lt;code&amp;gt;xx&amp;lt;/code&amp;gt;)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Definition Files&#039;&#039;. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Definition File erfolgt über den ProductCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt-Id&#039;&#039; gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern stehen z.B. der ProductCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.B. die Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; und das Intervall &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen ProductCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Übersicht der Register anzeigen ===&lt;br /&gt;
Sobald ein SWAP Device mit dem ProductCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
=== Register auslesen oder setzen ===&lt;br /&gt;
Einzelne Register können abgefragt werden mit&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
oder auch gesetzt werden durch&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der Register ID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Intervall bei Sketch mit power down / batterie betriebene panStamps ===&lt;br /&gt;
panStamp Hardware mit power down Mode durchlaufen während des Booten (beim Einschalten oder bei einem Reset) eine 3 Sekunden Schleife und warten auf SWAP-Kommandos, die z.B. Register für das Sendeintervall oder sonstige Konfigurationen ändern. Nach dieser Zeit wird die normale Loop Schleife im Arduino Sketch gestartet. Normaler Weise werden dann die Register mit den Sensorwerten an FHEM gesendet. Power down Devices gehen danach schlafen (power down Modus mit extrem niedrigem Stromverbrauch) und wachen regelmäßig auf (TX_INTERVAL aus dem Systemregister) um die Sensoren auszulesen und die Werte wieder an FHEM zu senden. Das Sendeintervall betrifft nur das Senden der Sensorwerte. Normalerweise empfängt das panStamp Modul in diesem Modus keine Befehle mehr. Das passiert nur einmalig nach einem Reset. Je nach Sketch kann das natürlich variieren und anders programmiert sein!&lt;br /&gt;
&lt;br /&gt;
Nachrichten an eine panStamp-Hardware im power-down-state werden in FHEM gepuffert (siehe INTERNAL SWAP_CMDsPending) und dann an die panStamp-Hardware geschickt, sobald dieses sich im SYNC Status befindet. Dieses ist typischer Weise nach dem Startup z.B. nach einem Reset der Fall.&lt;br /&gt;
&lt;br /&gt;
Bei batteriebetriebenen Sensoren sollte das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;Intervall in Sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87409}}&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene panStamp-Module (genauer: Module die den Power-Down-Modus unterstützen) wird das Default Sendeintervall bei der Einrichtung automatisch von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden = 15 Minuten) geändert. Das Intervall wird nur automatisch gesetzt, wenn pwrdownmode im device definition file true ist. {{Link2Forum|Topic=12487 |Message=89205}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt mit bestimmten panStamp lib Versionen das Problem das ein Wert von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; im Systemregister &amp;lt;code&amp;gt;0A&amp;lt;/code&amp;gt; zum Überlauf führt und der panStamp dann ununterbrochen sendet. Im [[SWAP]] Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host Systemen (z.B. FritzBox) nicht, weil der panStamp so schnell sendet, dass FHEM mit dem Abarbeiten so beschäftigt und ausgelastet ist, dass es selber nicht zum Senden kommt. Zur Abhilfe kann im Sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden. Den Sketch dann noch mal flashen. Wenn der panStamp mit diesem Sketch einmal durchgelaufen ist, können diese beiden Zeilen wieder entfernen und der panStamp noch mal geflasht werden. Damit wurde das Sendeintervall einmalig auf &amp;lt;code&amp;gt;0x5555&amp;lt;/code&amp;gt; (0x5555 in Dezimal = 21.845 (Sekunden), entspricht 364 Minuten) gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Device Adresse automatisch setzen ===&lt;br /&gt;
Erkennt das SWAP Modul eine panStamp-Hardware mit der Adresse &amp;lt;code&amp;gt;0xFF&amp;lt;/code&amp;gt; wird automatisch eine neue Adresse durch das [[SWAP] Modul vergeben. Die automatisch vergebenen Adressen sind im Bereich &amp;lt;code&amp;gt;0xF0 - 0xFE&amp;lt;/code&amp;gt;. Das soll das Inbetriebnehmen von mehreren panStamp-Hardwaremodulen gleichzeitig erleichtern. Der automatisch vergeben Adressbereich ist begrenzt und sollte nur temporär verwendet werden. Nach der Inbetriebnahme sollte den panStamp Modulen eine individuelle, lokal passende Adresse geändert werden. {{Link2Forum|Topic=12487 |Message=87919}}&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=87859}}&lt;br /&gt;
&lt;br /&gt;
Im Log sollte etwas in dieser Art auftauchen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP Unknown device FF, please define it&lt;br /&gt;
2013.07.29 20:14:29 2: autocreate: define SWAP_F0 SWAP FF 000000010000000E&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP_F0: I/O device is panStamp&lt;br /&gt;
2013.07.29 20:14:29 3: SWAP SWAP_F0: changing 09-DeviceAddress from default FF to F0&lt;br /&gt;
2013.07.29 20:14:30 3: SWAP SWAP_F0: changing 0A-PeriodicTxInterval from default FFFF to 0384 (900 seconds)&lt;br /&gt;
&lt;br /&gt;
2013.07.29 20:16:35 3: SWAP Unknown device FF, please define it&lt;br /&gt;
2013.07.29 20:16:35 2: autocreate: define SWAP_F1 SWAP_0000002200000003 FF 0000002200000003&lt;br /&gt;
2013.07.29 20:16:35 3: SWAP_F1: I/O device is panStamp&lt;br /&gt;
2013.07.29 20:16:36 3: SWAP SWAP_F1: changing 09-DeviceAddress from default FF to F1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Registerinhalt von hex auf Dezimal umrechnen  ===&lt;br /&gt;
Die Registerinhalte sind immer hexadezimale Zahlenwerte. In den meisten Fällen werden diese umgerechnet werden in Dezimalzahlen.&lt;br /&gt;
Hierzu kann die Perlfunktion hex() verwendet werden.&lt;br /&gt;
Beide Funktionsaufrufe geben in diesem Beispiel die Dezimalzahl 250 aus:&lt;br /&gt;
 {hex(&amp;quot;FA&amp;quot;)}&lt;br /&gt;
 {hex(&amp;quot;0xFA&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: panStamp soilmoisture Sketch in FHEM einbinden ===&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Ein Artikel über ein selbst entwickeltes panStamp Batterieboard zum Anschluss von Analogsensoren/1Wire und Solarversorgung ist hier [[Bodenfeuchtesensor]] beschrieben. Die Weiterentwicklung zum Umweltsensor ist hier [[panStamp_Umweltsensor]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix Sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das Register &amp;lt;code&amp;gt;0A&amp;lt;/code&amp;gt; konfigurierbar. Der Sensor wird an GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an panStamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an panStamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine panStamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
== Trouble Shooting ==&lt;br /&gt;
=== value has to be 10 byte(s) in size  ===&lt;br /&gt;
Es besteht die Möglichkeit, dass die Internals aus irgendeinem Grund nicht vollständig sind. &lt;br /&gt;
Abhilfe in einem solchen Falle kann das Absetzen der folgenden beiden Befehlt schaffen&lt;br /&gt;
 set &amp;lt;device&amp;gt; statusRequest&lt;br /&gt;
 set &amp;lt;device&amp;gt; readDeviceXML&lt;br /&gt;
&lt;br /&gt;
Wenn das nicht zum Erfolg führt, hilft ggf. ein Löschen und neu setzen des ProductCode Attributs.&lt;br /&gt;
{{Link2Forum|Topic=34474.0}}&lt;br /&gt;
&lt;br /&gt;
Das Übertragen aller Daten nach dem Statusrequest kann einen Augenblick dauern.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit:&lt;br /&gt;
Die Fehlermeldung kommt immer wenn FHEM nicht weiß welche Firmware auf der panStamp-Hardware ist. Das passiert wenn irgendetwas in der Kommunikation schief geht während FHEM initialisiert.&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=122414}} &lt;br /&gt;
&lt;br /&gt;
=== register 0F is not known ===&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=84257}}&lt;br /&gt;
&lt;br /&gt;
=== Komplette Übersicht eines Device ===&lt;br /&gt;
 list &amp;lt;device&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201467}}&lt;br /&gt;
&lt;br /&gt;
=== fehlender oder falsche ProductCode ===&lt;br /&gt;
Fehlt der ProductCode, werden die zum Sketch zugehörigen Befehle nicht angezeigt und die Register nicht korrekt zugeordnet.&lt;br /&gt;
Verändert man den ProductCode, sollte man im Anschluss folgenden Befehlt absetzten, um alle Register neu auszulesen&lt;br /&gt;
 set &amp;lt;device&amp;gt; statusRequest&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201910}}&lt;br /&gt;
&lt;br /&gt;
=== missing commands und register 00-0A unvollständig ===&lt;br /&gt;
Wenn in den INTERNALS missing commands (SWAP_Sent_unconfirmed) auftauchen und ggf. die Register &amp;lt;code&amp;gt;00-0A&amp;lt;/code&amp;gt; nicht vollständig sind und das INTERNAL &amp;quot;channels&amp;quot; nicht vorhanden ist, gibt es irgendein Kommunikationsproblem.&lt;br /&gt;
&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=201939}}&lt;br /&gt;
&lt;br /&gt;
=== Funktion des Autocreate ===&lt;br /&gt;
Beim autocreate wird versucht ein Name für das Device zu vergeben, der zur nächsten freien Adresse passt. Während dieses Prozessen bleibt die Adresse erst mal trotzdem &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt;. Erst wenn das Device angelegt wird, kann versucht werden automatisch die Adresse zu setzen, hoffentlich auf die gleiche freie, die beim Namen auch schon gefunden wurde.  {{Link2Forum|Topic=12487 |Message=88110}}&lt;br /&gt;
&lt;br /&gt;
=== Adresse manuell setzen ===&lt;br /&gt;
Um die Adresse manuell bereits in den Sketch einzubauen kann man wie hier beschrieben vorgehen.&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=122347}}&lt;br /&gt;
&lt;br /&gt;
=== Undefined subroutine &amp;amp;main::XMLin ===&lt;br /&gt;
Erhält man diese Fehlermeldung&lt;br /&gt;
 Undefined subroutine &amp;amp;main::XMLin called at ./FHEM/34_SWAP.pm line 108.&lt;br /&gt;
 &lt;br /&gt;
 2013.09.26 11:34:24 0: ERROR: Cannot autoload SWAP&lt;br /&gt;
 2013.09.26 11:34:24 3: panStick: Unknown code 000A001B000A000000000100000007, help me!&lt;br /&gt;
&lt;br /&gt;
Es fehlt XML::Simple, was folgendermaßen installiert werden kann:&lt;br /&gt;
sudo apt-get install libxml-simple-perl&lt;br /&gt;
&lt;br /&gt;
=== panStamp antwortet nicht/EEprom to factory defaults ===&lt;br /&gt;
Wenn der panStamp nicht antwortet, kann es sein das die Adressen durcheinander gekommen sind. Dann musst man einmal in &amp;lt;code&amp;gt;setup()&amp;lt;/code&amp;gt; ein &amp;lt;code&amp;gt;eepromToFactoryDefaults()&amp;lt;/code&amp;gt; aufrufen und damit flashen. Wenn damit einmal gestartet wurde, die Zeile wieder entfernen und den normalen Sketch flashen. {{Link2Forum|Topic=13890 |Message=121677}}&lt;br /&gt;
&lt;br /&gt;
=== Factory Defaults ===&lt;br /&gt;
Um einen panStamp auf den Auslieferungszustand zurückzusetzen, muss man beim Sketch folgendes in die &amp;lt;code&amp;gt;setup()&amp;lt;/code&amp;gt; Routine einfügen:&lt;br /&gt;
 eepromToFactoryDefaults()&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=157125}}&lt;br /&gt;
&lt;br /&gt;
=== Status LED ===&lt;br /&gt;
Die Status LED auf dem Board wird in der config.h deaktiviert, indem man die Zeit &amp;lt;code&amp;gt;#define LED_DEBUG&amp;lt;/code&amp;gt; mit &amp;quot;//&amp;quot; auskommentiert. {{Link2Forum|Topic=13890 |Message=164731}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:panStamp]]&lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp_Programmierung&amp;diff=15508</id>
		<title>PanStamp Programmierung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp_Programmierung&amp;diff=15508"/>
		<updated>2016-06-04T16:47:00Z</updated>

		<summary type="html">&lt;p&gt;Joshi04: Neustrukturierung der Artikelserie &amp;quot;panStamp&amp;quot;; panStamp Programmierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:panStamp Programmierung}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel gehört zum Themenkomplex &amp;quot;panStamp&amp;quot; der [[panStamp|hier]] seinen Hauptartikel hat.&lt;br /&gt;
&lt;br /&gt;
== unter Windows ==&lt;br /&gt;
&lt;br /&gt;
=== Installation des USB-Sticks (panStick) ===&lt;br /&gt;
&lt;br /&gt;
Für die Installation des panStick unter Windows gibt es mehrere Möglichkeiten.&lt;br /&gt;
# Installiert man eine Arduino IDE, kann dabei auch der Treiber für den panStick mitinstalliert werden.&lt;br /&gt;
# Treiber von der offiziellen Homepage herunterladen und installieren [http://www.ftdichip.com/]. Die Treiber befinden sich ebenfalls im Unterordner drivers der Arduino IDE. &lt;br /&gt;
&lt;br /&gt;
Bei der Installation kann es sein, dass kein Treiber gefunden wird. Dann muss der entsprechende Treiber manuell ausgewählt werden entsprechend dieser Anleitung [https://www.youtube.com/watch?v=SPdSKT6KdF8].&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE 1.0.x vorbereiten ===&lt;br /&gt;
Zum Flashen der panStamps wird die Arduino IDE benötigt. Eine Installationsanleitung für Arduino IDE 1.0 ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Die IDE 1.5.x oder höher ist zwar mit den AVRs und NRGs kompatibel, wichtig zu wissen ist allerdings, dass mit dem Wechsel von 1.0.x zu 1.5.x oder höher es größere Änderungen der panStamp/SWAP Librarys gegeben hat. Dadurch lassen sich einige der bislang zur Verfügung stehenden Sketches (derzeit) nicht unter 1.5.x oder höher kompilieren (z.B. der RGBWW-Sketch). Für die IDE 1.0.x gibt es keine passenden Arduino Lib für den NRG [[https://github.com/panStamp/panstamp/wiki/First%20steps]], die daher nur mit den AVRs kompatibel sind. Im Folgenden wird sich für die Programmierung unter Windows daher auf die letzte 1.0.x IDE bezogen.&lt;br /&gt;
&lt;br /&gt;
* Man lädt die &#039;&#039;&#039;Arduino IDE 1.0.x&#039;&#039;&#039; für Windows [[http://arduino.cc/en/Main/OldSoftwareReleases]]. &lt;br /&gt;
* Für bestimmte Sketches müssen noch die entsprechenden Libs hinzugefügt werden (siehe [[panStamp#Sketch konfigurieren|explizite Anwendung]]).&lt;br /&gt;
* Unter &amp;lt;code&amp;gt;Tools/Board&amp;lt;/code&amp;gt; wird das &#039;&#039;&#039;passende Board&#039;&#039;&#039; ausgewählt, dass dem Chip auf dem panStamp entspricht. Für den panStamp AVR: &amp;lt;code&amp;gt;Arduino Pro or Pro Mini (3,3V, 8 MHz) /w ATmega328&amp;lt;/code&amp;gt;. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert, kann man in der IDE auch direkt &amp;lt;code&amp;gt;panStamp&amp;lt;/code&amp;gt; als Plattform auswählen.&lt;br /&gt;
* Nun muss unter &amp;lt;code&amp;gt;Tools/Serieller Port&amp;lt;/code&amp;gt; noch der richtigen &#039;&#039;&#039;Com-Port&#039;&#039;&#039; auswählen werden, unter dem der panStick eingebunden worden ist (entsprechend Gerätemanager).&lt;br /&gt;
* Als letztes unter &amp;lt;code&amp;gt;Tools/&#039;&#039;&#039;Programmer&#039;&#039;&#039;&amp;lt;/code&amp;gt; noch den &amp;lt;code&amp;gt;AVRISPx mkII&amp;lt;/code&amp;gt; auswählen.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE 1.6.x vorbereiten ===&lt;br /&gt;
Eine Installationsanleitung für Arduino IDE 1.6.4 ist unter folgendem Link zu finden:&lt;br /&gt;
:https://github.com/panStamp/panstamp/wiki/Installing-panStamp-cores-and-libraries-for-Arduino&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtiger Hinweis:&#039;&#039;&#039;&lt;br /&gt;
Bitte in jedem Falle die Einschränkungen bezüglich der Sketch-Kompatibilität beachten (siehe vorheriger Abschnitt).&lt;br /&gt;
&lt;br /&gt;
=== Sketch vorbereiten, kompilieren und hochladen ===&lt;br /&gt;
* Den Sketch lädt man von der entsprechenden Quelle und entpackt die Dateien in einen Unterordner z.B. parallel zum libraries-Ordner (unter &amp;quot;Eigene Dateien&amp;quot;). Der Ordner darf &#039;&#039;&#039;nicht im&#039;&#039;&#039; libraries-Ordner liegen, da die Arduino IDE dort das Speichern nicht zulässt. Innerhalb des Unterordners erwartet die IDE die Dateien in einen Unterordner namens &amp;quot;sketch&amp;quot;.&lt;br /&gt;
* sketch.ino oder ähnlich in der Arduino IDE öffnen.&lt;br /&gt;
* Nun entsprechend den Bedürfnissen auf dem geöffneten Reiter in den config.h die nicht benötigten Zeilen mit &amp;quot;//&amp;quot; auskommentieren bzw. anpassen.&lt;br /&gt;
* Nun sollte über Sketch/Überprüften/Kompilieren die Erstellung des Sketches möglich sein.&lt;br /&gt;
* Falls erfolgreich unter Datei/Hochladen (ohne Programmer) den Sketch auf den panStamp laden.&lt;br /&gt;
&lt;br /&gt;
Bezüglich der Anpassung des Sketches sind einige spezifische Informationen unten bei den expliziten Anwendungen ergänzt.&lt;br /&gt;
&lt;br /&gt;
=== Hexfile hochladen mit XLoader ===&lt;br /&gt;
Um ein fertig kompiliertes HEX-File hochzuladen, soll dieses über ein Programm namens XLoader möglich sein. [[http://xloader.russemotto.com]]&lt;br /&gt;
&lt;br /&gt;
== unter Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Installation des USB-Sticks (panStick) ===&lt;br /&gt;
&lt;br /&gt;
Eigentlich sollte der panStick automatisch von System erkannt und eingerichtet werden. &lt;br /&gt;
Er sollte dann automatisch unter /dev/ttyUSBx eingebunden werden. &amp;quot;x&amp;quot; steht für eine freie fortlaufende Nummer.&lt;br /&gt;
&lt;br /&gt;
Falls er nicht automatisch angelegt worden ist, kann man zunächst prüfen, ob dieser überhaupt eingebunden und richtig erkannt wurde.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;lsusb&amp;lt;/source&amp;gt;&lt;br /&gt;
Sollte etwas Ähnliches zurückmelden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;Bus 003 Device 002: ID 0403:0000 Future Technology Devices International, Ltd H4SMK 7 Port Hub&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Falls das Device nicht automatisch angelegt worden ist, muss dieses ggf. von Hand erledigt werden, wie in diesem {{Link2Forum|Topic=12487|Message=87746}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Befehl sollte in der Liste ein ttyUSB auftauchen. Normalerweise mit der Nummer 188.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;cat /proc/devices&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Device wird dann angelegt mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo mknod /dev/ttyUSB0 c 188 0&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich muss für den Betrieb des panStick das ftdi_sio Modul zur Verfügung stehen. Dieses lässt sich prüfen mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;lsmod&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Voraussetzung könnte den Betrieb an einer [[AVM Fritz!Box|Fritz!Box]] erschweren, da nicht sicher ist, ob dieses Modul standardmäßig installiert ist.&lt;br /&gt;
&lt;br /&gt;
Legt man das Device von Hand an, kann es sein, dass die Berechtigungen nicht richtig gesetzt sind. Beim Versuch der Definition erhält man dann die folgende Fehlermeldung:&lt;br /&gt;
 2015.04.23 22:20:06 3: Opening panStick device /dev/ttyUSB0 &lt;br /&gt;
 2015.04.23 22:20:06 3: Can&#039;t open /dev/ttyUSB0: Permission denied&lt;br /&gt;
&lt;br /&gt;
Das Device sollte für die Gruppe dialout Lese-/Schreibberechtigungen haben.&lt;br /&gt;
Ist dieses nicht der Fall, lassen sich diese über diesen folgenden Befehl setzen, damit wird der &amp;quot;Besitzer&amp;quot; festgelegt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo chown root:dialout ttyUSBx&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hiermit werden die Berechtigungen gesetzt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo chmod a+rw /dev/ttyUSBx&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Benutzer &amp;quot;fhem&amp;quot; sollte selbstverständlich der Gruppe &amp;quot;dialout&amp;quot; angehören. Ist dieses nicht der Fall:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo adduser fhem dialout&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls dem nicht so sein sollte, hilft ggf. einer dieser beiden Links weiter:&lt;br /&gt;
[[https://www.youtube.com/watch?v=UOECwHhCWRg]] [[http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/07/15/bbb--usb-io-with-ftdi-ft2232h]] bzw. die Installation des Moduls.&lt;br /&gt;
&lt;br /&gt;
Da bei der Verwendung mehrerer USB-Interfaces es durchaus vorkommen kann, dass sich die Reihenfolge und damit die Nummerierung der Adresse ändert, sei darauf hingewiesen, dass die Adressierung auch per &amp;quot;by-id&amp;quot; geschehen kann (siehe {{Link2Forum|Topic=12487|Message=317189|LinkText=diesen Forenbeitrag}}). Dadurch wird die Adressierung wesentlich stabiler gegenüber Änderungen bei Neustarts des Systems oder tauschen der USB-Ports. Die Adressierung über die ID ist daher stark empfohlen, die o.g. Schritte bzgl. der Einrichtung müssen entsprechend bei Bedarf angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Hat man die Adresse herausgefunden, wird der panStick folgendermaßen in der FHEM Eingabezeile definiert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; define mypanStick panStamp /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A92LHB3Z-if00-port0@38400&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses IO-Device, versucht dann, alle panStamps per SWAP-Broadcast zu finden und per autocreate anzulegen, wenn dieses aktiv sind. Die weitere Funktion übernimmt das Modul [[SWAP]], was das Funkprotokoll der panStamp Module in FHEM implementiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Betrieb an der Fritzbox&#039;&#039;&#039;&lt;br /&gt;
Spezialitäten zum Betrieb an einer Fritzbox sind hier [http://forum.fhem.de/index.php/topic,12487.msg87778.html#msg87778] und hier [http://forum.fhem.de/index.php/topic,12487.msg95914.html#msg95914] beschrieben. Es scheint nur der hintere USB-Anschluss für die Verwendung zu laufen. Außerdem muss der USB-Fernanschluss deaktiviert sein.&lt;br /&gt;
&lt;br /&gt;
=== INO ===&lt;br /&gt;
Der RGB-Sketch wurde mit Hilfe des Tools INO entwickelt. &lt;br /&gt;
{{Link2Forum|Topic=12487|Message=82139 }}&lt;br /&gt;
&lt;br /&gt;
Die Installation erfolgt am leichtesten mit Hilfe des Tools pip.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen für das Tool sind darüber hinaus picocom für die Kommunikation mit der seriellen Schnittstelle und die Arduino. Im gleichen Zuge lässt sich pip installieren.&lt;br /&gt;
Die benötigten Pakete werden über folgenden Aufruf installiert&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install picocom python-pip arduino&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Installation erfolgt im Anschluss über&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo pip install ino&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die für einen Sketch erforderlichen libs werden in den entsprechenden lib Ordner kopiert (dort in entsprechenden Unterordnern).&lt;br /&gt;
&lt;br /&gt;
Die Pfade im Zip sind an dieses Tool angepasst.&lt;br /&gt;
{{Link2Forum|Topic=12487|Message=94830 }}&lt;br /&gt;
&lt;br /&gt;
Der serielle Port in der ino.ini muss selbstverständlich an die passende dev-Schnittstelle angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Als letztes sind die Parameter für das Board noch in die board.txt unter /usr/share/arduino/hardware/arduino einzutragen. Die Parameter lassen sich von hier extrahieren [http://old.panstamp.com/downloads] bzw. lauten für den AVR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################&lt;br /&gt;
&lt;br /&gt;
panstamp.name=PanStamp v2.0 (3.3V, 8 MHz) w/ ATmega328&lt;br /&gt;
&lt;br /&gt;
panstamp.upload.protocol=arduino&lt;br /&gt;
panstamp.upload.maximum_size=30720&lt;br /&gt;
panstamp.upload.speed=57600&lt;br /&gt;
&lt;br /&gt;
panstamp.bootloader.low_fuses=0xE2&lt;br /&gt;
panstamp.bootloader.high_fuses=0xD8&lt;br /&gt;
panstamp.bootloader.extended_fuses=0x07&lt;br /&gt;
panstamp.bootloader.path=atmega&lt;br /&gt;
panstamp.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex&lt;br /&gt;
panstamp.bootloader.unlock_bits=0x3F&lt;br /&gt;
panstamp.bootloader.lock_bits=0x0F&lt;br /&gt;
&lt;br /&gt;
panstamp.build.mcu=atmega328p&lt;br /&gt;
panstamp.build.f_cpu=8000000L&lt;br /&gt;
panstamp.build.core=arduino&lt;br /&gt;
panstamp.build.variant=standard&lt;br /&gt;
&lt;br /&gt;
##############################################################&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig zu wissen: jedesmal, wenn die Arduino ein Update erhält, wird vermutlich diese Datei überschrieben, so dass die Eintragung wiederholt werden muss.&lt;br /&gt;
&lt;br /&gt;
Hier sind die grundlegenden Befehle beschrieben [http://inotool.org/quickstart].&lt;br /&gt;
&lt;br /&gt;
Wechselt man nun in das Verzeichnis z.B. des RGBdriver, lässt die der Sketch kompilieren über&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ino build&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und hochladen über&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo ino upload&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Troubeshooting&lt;br /&gt;
: siehe {{Link2Forum|Topic=12487|Message=134786|LinkText=diesen Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
== IDE unter MacOS ==&lt;br /&gt;
Da für den RGB-Sketch die IDE 1.0.x benötigt wird und diese Java SE 6 eine Voraussetzung ist, stellt die IDE und MacOS keine Optimale Konfigurationsumgebung dar. Wer es trotzdem probieren möchte&lt;br /&gt;
{{Link2Forum|Topic=12487|Message=82055 }}&lt;br /&gt;
&lt;br /&gt;
== over-the-air (derzeit) nur NRG ==&lt;br /&gt;
Die neueren panStamp NRGs können seit einiger Zeit auch over-the-air geflasht werden, wie hier im zugehörigen {{Link2Forum|Topic=30589|LinkText=Forumthread}}.&lt;br /&gt;
&lt;br /&gt;
== Was überlebt das Flashen==&lt;br /&gt;
Bestimmte Konfigurationen überstehen das Flashen, dieses sind zumindest Adresse und Intervall, die nicht neu gesetzt werden müssen (siehe diesen {{Link2Forum|Topic=12487|Message=87560}}).&lt;br /&gt;
&lt;br /&gt;
== EEPROM löschen ==&lt;br /&gt;
Das EEPROM lässt sich komplett löschen, indem man in der setup() die folgende Eintragung vornimmt (siehe  dazu diesen {{Link2Forum|Topic=13890|Message=156868}}): &lt;br /&gt;
 eepromToFactoryDefaults()&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:panStamp]]&lt;/div&gt;</summary>
		<author><name>Joshi04</name></author>
	</entry>
</feed>