http://wiki.fhem.de/w/api.php?action=feedcontributions&user=No+Legend&feedformat=atomFHEMWiki - Benutzerbeiträge [de]2024-03-28T08:46:16ZBenutzerbeiträgeMediaWiki 1.39.3http://wiki.fhem.de/w/index.php?title=MQTT2-Module_-_Praxisbeispiele&diff=37314MQTT2-Module - Praxisbeispiele2022-03-16T05:50:41Z<p>No Legend: /* pulseTime */ Workaround für Deaktivierung der PulseTime bei normalen Befehlen hinzu</p>
<hr />
<div>== Einführung: MQTT bzw. MQTT2 in FHEM ==<br />
{{Randnotiz|RNTyp=y|RNText=Sollten Sie MQTT2_CLIENT verwenden, beachten Sie bitte, dass der MQTT2_CLIENT die ursprüngliche Herkunft der über MQTT verteilten Informationen nicht kennt. Daher ergeben sich in der Anwendung kleinere Unterschiede, zu deren Verständnis die diesbezüglichen [[MQTT2_CLIENT#Anwendung|Hinweise zu MQTT2_CLIENT]] bekannt sein sollten.}}Zur Einbindung von Geräten, welche zur Nutzung des MQTT-Protokols konfiguriert werden können und darüber mit einem MQTT-Server (früher: Broker) kommunizieren, stehen unter FHEM verschiedene Optionen zur Verfügung, wobei nicht alle Module beliebig miteinander verwendet werden können. Details hierzu sind dieser [[MQTT|Übersicht]] zu entnehmen. <br />
<br />
Im Rahmen dieses Artikels wird für die eigentlichen Geräte [[MQTT2 DEVICE|MQTT2_DEVICE]] verwendet, damit wird als IO-Device entweder {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} oder [[MQTT2 CLIENT|MQTT2_CLIENT]] benötigt, mit einem IO-Device des Typs [[MQTT (Modul)|MQTT]] funktioniert die nachfolgende Darstellung dagegen nicht<ref>Allerdings können die Konfigurationen in der Regel recht einfach auf die bisherige MQTT-Implementierung übertragen werden</ref>. MQTT2_DEVICE unterstützt u.a. auch die ''setExtensions'' direkt, also z.B. ''on-for-timer<ref>Beachten Sie bei mehrkanaligen Geräten, dass jeweils nur ein Hauptkanal mittels setExtensions verwaltet werden kann! U.a. aus diesen Grund ist es meist sinnvoller, die ''split''-Varianten der attrTemplate-Einrichtung zu verwenden.</ref>'' sowie ''[[MQTT2-Module - Praxisbeispiele#attrTemplate_2|attrTemplate]]''<ref>Auch MQTT_DEVICE unterstützt SetExtensions, allerdings muss dies dort per Attribut eingeschaltet werden</ref>.<br />
<br />
=== Allgemeine Einstellungen und Hinweise ===<br />
{{Randnotiz|RNTyp=r|RNText=Beachten Sie, dass für [[autocreate]] in Verbindung mit MQTT2_SERVER '''zwingend''' jeder über MQTT kommunizierende Client eine ClientID angeben muss. Passen Sie daher ggf. die Einstellungen Ihres Geräts an. Manche Geräte verwenden auch "Wegwerf"-ClientID's. Für diese empfiehlt es sich, ggf. dann die durch autocreate erstellten Geräte nachzubearbeiten und die ClientID-Angabe v.a. aus den Inhalten des readingList-Attributs zu entfernen.}}Die nachfolgenden Beispiele gelingen am einfachsten mit '''MQTT2_SERVER als Server ("Broker")''', für diesen sollte dabei ''autocreate'' '''nicht deaktiviert''' sein, damit die erforderlichen MQTT2_DEVICES soweit möglich automatisiert erstellt werden<ref>Dabei wird vorausgesetzt, dass ein allgemeines {{Link2CmdRef|Anker=autocreate|Lang=en|Label=autocreate}}-Device (''TYPE=autocreate'') ebenfalls aktiv ist.</ref> . <br />
<br />
Beispiel<ref>MQTT2_SERVER verwendet als default-Einstellung für ''autocreate'' ''simple'', ohne dass ein entsprechendes Attribut gesetzt werden müsste. Die Einstellung ''complex'' empfiehlt sich in der Regel nicht; diese ist jedoch dann zu empfehlen, wenn das Device entweder verschachtelte JSON-Array-Strukturen liefert oder bestimmte Readings nicht gefüllt werden sollen.</ref>:<br />
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global<br />
<br />
Falls der MQTT Broker mit Hilfe von [[allowed]] abgesichert wurde, muss in den Geräten ebenfalls User bzw. Passwort eingetragen werden, damit eine MQTT Kommunikation möglich ist.<br />
<br />
{{Hinweis|Die Code-Darstellung in diesem Beitrag entspricht jeweils dem RAW-Format zum [[Import von Code Snippets]]. Wer die Attribute direkt und einzeln bearbeitet, muss ggf. die "\" entfernen!}}<br />
<br />
=== MQTT-Einstellungen in den Geräten ===<br />
Die Beispiele gehen davon aus, dass die einzubindenden Geräte '''''mit den default-Einstellungen''''' für MQTT betrieben werden, wenn man von den Angaben zum Server und ggf. der Gerätekennung absieht. Es sollten also insbesondere '''keine Veränderungen der topic-Pfade''' vorgenommen werden.<br />
<br />
{{Hinweis|Einige der hier beschriebenen Einstellungen haben Änderungen der sich durch die jeweiligen Automatismen eigentlich jeweils ergebenden Standard-Werte zur Folge, insbesondere, was Reading-Namen und von den Geräten gesendete Werte angeht. Sie sollten daher zunächst die Konfiguration des jeweiligen MQTT2-DEVICE-Geräts abschließen, und erst anschließend die weitere Integration mit Event-Handlern, logging usw. vornehmen. }}<br />
<br />
=== auto-Konfigurations-features ===<br />
Viele firmwares und Dienste bieten Möglichkeiten an, einer Controller-Software (insbesondere homeassistant) Hilfsdaten zur automatisierten Konfiguration bereitzustellen. Da FHEM diese Daten nicht zu ihrem ursprünglichen Zweck verwenden kann, werden hierdurch lediglich zusätzliche Readings erzeugt, mit denen man als User in der Regel wenig anfangen kann. Es wird daher empfohlen, derartige features '''abzuschalten'''. Wo dies nicht möglich ist, sollte man eine passende [[MQTT2_CLIENT#ignoreRegexp|ignoreRegexp]] setzen bzw. diese passend erweitern!<br />
<br />
=== Schritt für Schritt ===<br />
Hier werden in der Regel fertige Konfigurationen für häufige Anwendungsfälle (beispielhaft) dargestellt. In [[MQTT2_DEVICE - Schritt für Schritt]] ist etwas mehr über die Vorgehensweise bei der Zusammenstellung der verschiedenen Attribute und deren Zusammenwirken zu erfahren.<br />
<br />
== zigbee2mqtt ==<br />
[[Bild:MQTT2_zigbee2mqtt_Bulbs.png|400px|thumb|Darstellung in FHEMWEB]]<br />
[https://www.zigbee2mqtt.io zigbee2mqtt] ist ein open-source Projekt, mit dem zigbee-Geräte über MQTT direkt angesprochen werden können, ohne dass hierfür eine Bridge eines Herstellers benötigt wird.<br />
<br />
Einzelheiten zur Vorgehensweise sind auf der Detailseite [[Zigbee2mqtt|zigbee2mqtt]] zu finden.<br />
<br />
== Tasmota ==<br />
{{Randnotiz|RNTyp=r|RNText=Bitte beachten Sie, dass versicherungsrechtliche Probleme entstehen können, wenn die herstellereigene Firmware ersetzt wird!}}[https://github.com/arendst/Sonoff-Tasmota Tasmota] ('''T'''heo '''A'''rends '''S'''onoff '''M'''QTT '''O'''ver '''T'''he '''A'''ir - einer offenen Firmware von [https://github.com/arendst arendst]) ist eine open-source Software für ESP8266-Geräte, die z.B. statt der originalen Firmware für Sonoff-Geräte und andere ESP8266-basierte WLAN-Steckdosen usw. verwendet werden kann. <br />
{{Hinweis|[[Datei:Tasmota mqtt config.png|120px|thumb|right]]Vor allem, aber nicht nur bei Verwendung des MQTT2_CLIENT als IO, ist es empfehlenswert, in der MQTT-Konfiguration der tasmota-Geräte für den Parameter ''<nowiki>topic = %topic% (tasmota)</nowiki>'' ebenfalls die dynamisch aus der Chip-ID erzeugte Kennung ''DVES_%06X'' zu verwenden. (Kopieren Sie einfach diese Zeichenkette aus dem Eingabefeld für ''"client ..."'', siehe nebenstehende Abbildung). Die eigentliche Umbenennung zu einem "sprechenden Namen" kann dann innerhalb von FHEM - mittels ''rename'' oder ggf. mit einem ''alias'' - erfolgen.}}<br />
=== MQTT2_DEVICE ===<br />
Dieses sollte bei aktiviertem ''autocreate'' am MQTT2_SERVER-Device automatisch angelegt werden, sobald das betreffende Gerät eingesteckt oder neu gestartet oder an einem evtl. vorhandenen Taster geschalten wird. Bislang wurden Tasmota version(en) ab 6.1.1 bis min. 8.1.0 getestet, dies auf verschiedener Hardware, zunächst mit Sonoff Touch und S20, zwischenzeitlich mit einer Vielzahl von Geräten, die per USB-Adapter oder mit der Methode aus dem [https://www.heise.de/ct/artikel/Tuya-Convert-IoT-Geraete-ohne-Loeten-vom-Cloud-Zwang-befreien-4283623.html Tuya-Convert]-Projekt des heise-Verlags auf Tasmota umgeflasht wurden.<br />
<br />
=== Manuelle Anpassungen - Schalter ===<br />
Die RAW-Definition kann dann beispielsweise wie folgt ergänzt werden: <br />
<syntaxhighlight lang="perl"><br />
defmod MQTT2_DVES_9B01BD MQTT2_DEVICE DVES_9B01BD<br />
attr MQTT2_DVES_9B01BD IODev m2server<br />
attr MQTT2_DVES_9B01BD devStateIcon on:FS20.on:off off:FS20.off:on<br />
attr MQTT2_DVES_9B01BD readingList DVES_9B01BD:tele/DVES_9B01BD/STATE:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:tele/DVES_9B01BD/LWT:.* LWT\<br />
DVES_9B01BD:tele/DVES_9B01BD/UPTIME:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:tele/DVES_9B01BD/SENSOR:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:tele/DVES_9B01BD/INFO1:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:tele/DVES_9B01BD/INFO2:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:tele/DVES_9B01BD/INFO3:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:stat/DVES_9B01BD/RESULT:.* { json2nameValue($EVENT) }\<br />
DVES_9B01BD:stat/DVES_9B01BD/STATE:.* { json2nameValue($EVENT) }<br />
attr MQTT2_DVES_9B01BD room MQTT2_DEVICE<br />
attr MQTT2_DVES_9B01BD setList on cmnd/DVES_9B01BD/POWER on\<br />
off cmnd/DVES_9B01BD/POWER off\<br />
reboot cmnd/DVES_9B01BD/Restart 1<br />
attr MQTT2_DVES_9B01BD webCmd on:off:reboot<br />
</syntaxhighlight><br />
<br />
=== Manuelle Anpassungen - Dimmer ===<br />
{{Randnotiz|RNTyp=r|RNText=Dieses Beispiel ist nur bedingt zur Nachahmung zu empfehlen: Prinzipiell kann man Readings und setter in MQTT2_DEVICE fast nach Belieben benennen. Wählt man allerdings <i>FHEM-typische</i> Namen, kann dies sehr zur Vereinfachung beitragen. Z.B. wird eine Sprachssteuerung bei einem Dimmer üblicherweise automatisch korrekt eingestellt werden, wenn der für die Helligkeit zuständige setter z.B. <i>pct</i> (oder <i>brightness</i>) heißt, oder eine abzufragende Temperatur <i>temperature</i>. Entsprechendes gilt im Rahmen von <i>devspec-Abfragen</i>.}}Bei einem Dimmer sind einige zusätzliche Anpassungen vorzunehmen. Ein Dimmer wird über '''POWER''' geschaltet und über '''Dimmer''' gedimmt. Damit das funktioniert, müssen ein stateFormat und devStateIcon zusammenarbeiten:<br />
<syntaxhighlight lang="perl"><br />
attr MQTT2_DVES_2DF34D devStateIcon 10\d.*:dim100%@orange:off 1\d.*:dim12%@orange:off 2\d.*:dim18%@orange:off 3\d.*:dim31%@orange:off 4\d.*:dim43%@orange:off 5\d.*:dim50%@orange:off 6\d.*:dim62%@orange:off 7\d.*:dim68%@orange:off 8\d.*:dim81%@orange:off 9\d.*:dim93%@orange:off 0:FS20.off:on .*:FS20.off@orange:off<br />
attr MQTT2_DVES_2DF34D stateFormat {if(ReadingsVal($name,"POWER",0)eq"off"){0}else{ReadingsVal($name,"Dimmer",0)}}<br />
</syntaxhighlight><br />
Nun kann man über das Icon ein- und ausschalten und der Zustand des Dimmers wird korrekt angezeigt.<br />
<br />
Es fehlt noch ein Slider, um auch dimmen zu können. Zusätzlich muss setList noch um Dimmer erweitert werden:<br />
<syntaxhighlight lang="text"><br />
attr MQTT2_DVES_2DF34D setList on cmnd/dimmer/POWER on\<br />
off cmnd/dimmer/POWER off\<br />
Dimmer cmnd/dimmer/Dimmer<br />
attr MQTT2_DVES_2DF34D webCmd Dimmer<br />
attr MQTT2_DVES_2DF34D widgetOverride Dimmer:slider,0,1,100<br />
</syntaxhighlight><br />
<br />
=== attrTemplate ===<br />
===== Allgemeines =====<br />
Für gängige Tasmota-Geräte stehen ''templates'' bereit, mit denen sich diese schnell konfigurieren lassen. <br />
Beachten Sie dazu den Abschnitt ''attrTemplate'' in [[MQTT2 DEVICE#attrTemplate|MQTT2_DEVICE]]. Bei Anwendung eines template mit "split" im Namen werden dabei weitere Geräte angelegt und konfiguriert.{{Hinweis|Bitte attrTemplates nicht verwechseln mit templates, die auf den Tasmota- bzw. Blackadder-Seiten angeboten werden, welche zur Konfiguration der firmware genutzt werden können! Es sollte zunächst die firmware korrekt eingerichtet werden, so dass das Gerät selbst direkt auf dessen Web-Interface korrekt bedient werden kann.}}<br />
<br />
===== Kein passendes attrTemplate vorhanden? =====<br />
Exisitert (noch) kein passendes attrTemplate, ist zu empfehlen, zunächst das "''tasmota_basic''" anzuwenden. Dieses führt einige Basiskonfigurationen durch, die für FHEM hilfreich sind, z.B. wird die firmware so eingestellt, dass Schaltzustände in Kleinschreibung übermittelt werden, statt der defaults "ON" bzw. "OFF".<br />
<br />
Allerdings stellt dieses das ''autocreate'' an dem MQTT2_DEVICE auf 0, was dann nicht optimal ist, wenn man weitere Readings aus dem Gerät erwartet, etwa, weil zusätzliche Sensoren vorhanden sind. In diesem Fall empfiehlt es sich, das ''autocreate''-Attribut an dem MQTT2_DEVICE zu löschen, damit alle weiteren Informationen verarbeitet werden und ggf. im ''jsonMap''-Attribut nur die Angabe "''POWER1:state''" zu belassen.<br />
<br />
=== on-for-timer ===<br />
Um z.B. ein Relais nur für einen Zeitraum anzuschalten, kann man bei Tasmota-Geräten zwischen mehrere Varianten wählen. Ohne speziellen ''setter'' in der ''setList'' werden die '''SetExtensions''' verwendet. Timer laufen damit innerhalb FHEM. Da diese intern als temporäres [[at]] ausgeführt werden, sind diese auch noch nach einem FHEM-Neustart vorhanden, sofern FHEM ordnungsgemäß beendet und neu gestartet wird.<br />
<br />
Die Tasmota-firmware bietet ergänzend dazu zwei Möglichkeiten an, bei denen der Timer direkt auf dem ESP-Microcontroller verwaltet wird:<br />
<br />
==== delay ==== <br />
Zeile zur Erweiterung der ''setList'' (Attributeingabe via FHEMWEB!):<br />
on-for-timer {my $duration = $EVTPART1*10; 'cmnd/DVES_575127/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br />
<br />
Ohne Auswirkungen auf alles, was danach kommt, hat aber den Nachteil, dass die möglichen Zeitspannen auf 3600 1/10 Sekunden begrenzt sind (siehe [https://tasmota.github.io/docs/Commands/#delay Commands - Tasmota Delay]), also 6 Minuten.<br />
<br />
====pulseTime ====<br />
Zeile zur Erweiterung der ''setList'' (s.o.):<br />
on-for-timer {my $duration = $EVTPART1 < 11.2 ? $EVTPART1*10 : $EVTPART1+100; 'CMNDTOPIC/Backlog pulseTime1 '.$duration.'; POWER1 1'}<br />
Auch hier sind die möglichen längsten Einschaltdauern begrenzt, allerdings ist diese mit 18h deutlich länger als mit ''delay''. Diese Implementierung hat den Nachteil, dass der ESP-Microcontroller die jeweils letzte pulseTime auch für alle weiteren "normalen" Einschaltvorgänge berücksichtigt, das Relais also ebenfalls nach Ablauf der übermittelten pulseTime abgeschaltet wird; dies gilt allerdings ohne explizites ''save'' nur bis zum nächsten reboot des Microcontrollers.<br />
<br />
Da nach dem ersten pulseTime setzten, diese immer benutzt wird, kann man mit einem kleine Workaround das Device normal arbeiten lassen. Dafür wird bei jedem anderem Befehl, aus der PulseTime, der Timer deaktiviert.<br />
Hierfür machen wir uns zu nutzen, dass man mehrere Befehle gleichzeitig an Tasmota senden kann (backlog). Ob diese Lösung auch mit anderen MQTT Firmwares funktioniert, kann ich nicht sagen. Es wurde lediglich mit Tasmota getestet.<br />
Wir senden also, bevor wir den eigentlich Tasmota Befehl zum Ein- oder Ausschalten schicken, einen Befehl zum deaktivieren des Timers: "pulseTime 0"<br />
Hier ein Beispiel: (das entsprechende device "DEV_611F3E" muss gegen das eigene ersetzt werden)<br />
off:noArg cmnd/DVES_611F3E/backlog pulseTime 0; POWER1 0<br />
on:noArg cmnd/DVES_611F3E/backlog pulseTime 0; POWER1 1 <br />
toggle:noArg cmnd/DVES_611F3E/backlog pulseTime 0; POWER1 2<br />
<br />
=== zigbee2tasmota ===<br />
[https://tasmota.github.io/docs/Zigbee/ zigbee2tasmota] ist eine Erweiterung der Tasmota-firmware für Microcontroller, insbesondere dem ESP8266 (und ESP32)(link), über die einige ZigBee-Chipsätze (insbesondere TI CC2530) als [[ZigBee#Koordinator_.28ZigBee_coordinator.2C_ZC.29|Coordinator]] eingebunden werden können, um ein ZigBee-Netzwerk aufzubauen.<br />
{{Hinweis|Stand 08/2020 war die Einbindung anderer Chipsätze erst in einem Alpha-Stadium; die Zahl der über einen CC2530 einbindbaren ZigBee-Geräte ist daher derzeit relativ begrenzt (ca. 16)!}}<br />
Auch für diese Lösung stehen einige ''attrTemplate'' zur Verfügung. Nähere Informationen hierzu sind dem Artikel [[Zigbee2Tasmota-MQTT]] zu entnehmen.<br />
<br />
== ESPurna ==<br />
ESPurna ist eine weitere alternative firmware für ESP8266-basierte Geräte, Details sind der [https://github.com/xoseperez/espurna/wiki Projektseite] zu entnehmen.<br />
<br />
Das Format, in dem ESPurna Daten sendet, unterscheidet sich v.a. darin, dass bool'sche Werte als 0 oder 1 gesendet werden, und nicht wie sonst üblich als "on" oder "off" oä.. Es stehen einige Mustertemplates zur Verfügung, um diese Art der Payload in FHEM-konforme Werte zu überführen.<br />
<br />
== Shelly ==<br />
=== Vorbemerkung ===<br />
Auch für Shelly-Geräte steht eine Auswahl an [[MQTT2-Module - Praxisbeispiele#attrTemplate_2|templates]] bereit.<br />
Beachten Sie auch hier, dass uU. bei Anwendung eines template mit "split" im Namen weitere Geräte angelegt und konfiguriert werden.<br />
<br />
Standardmäßig senden die Shelly-Geräte ihren kompletten Status alle 30 Sekunden. Dies kann man über den Parameter ''mqtt_update_period'' in den ''settings'' ändern, allerdings ist dieser nur über die HTTP-Schnittstelle des Shelly verfügbar. Um diese Statusupdates abzustellen, kann über den Browser folgender Befehl verwendet werden:<br />
http://<ip-des-shelly>/settings?mqtt_update_period=0, <br />
Soweit bekannt, werden dann nur statische updates ausgeschaltet, z.B. für das Relay bzw. angeschlossene Taster oder Schalter; insbesondere Verbrauchswerte werden dennoch aktualisiert.<br />
<br />
=== Shelly1 ===<br />
<br />
=== Shellybulb ===<br />
Zunächst muss man einen Statusupdate des Shellybulb erzwingen (Aus- und Einschalten, physikalisch oder per Web-UI), damit das Gerät bei eingeschaltetem autocreate angelegt wird. Dies sieht zunächst so aus:<br />
Internals:<br />
CFGFN <br />
CID shellybulb_3CC533<br />
DEF shellybulb_3CC533<br />
DEVICETOPIC MQTT2_shellybulb_3CC533<br />
IODev MQTT2_FHEM_Server<br />
NAME MQTT2_shellybulb_3CC533<br />
NR 246<br />
STATE ???<br />
TYPE MQTT2_DEVICE<br />
READINGS:<br />
2018-12-12 19:28:08 status_blue 0<br />
2018-12-12 19:28:08 status_brightness 61<br />
2018-12-12 19:28:08 status_effect 0<br />
2018-12-12 19:28:08 status_gain 26<br />
2018-12-12 19:28:08 status_green 0<br />
2018-12-12 19:28:08 status_ison true<br />
2018-12-12 19:28:08 status_mode color<br />
2018-12-12 19:28:08 status_red 255<br />
2018-12-12 19:28:08 status_temp 3250<br />
2018-12-12 19:28:08 status_white 0<br />
Attributes:<br />
IODev MQTT2_FHEM_Server<br />
readingList shellybulb_3CC533:shellies/shellybulb-3CC533/color/0/status:.* { json2nameValue($EVENT, 'status_') }<br />
room MQTT2_DEVICE<br />
[[Bild:MQTT2 Shellybulb.png|400px|thumb|Darstellung in FHEMWEB nach Anwendung des template]]Dann bei den set-Anweisungen das attrTemplate "shellybulb" auswählen und setzen. Es erscheint eine Abfrage, ob die vorhandenen Readings gelöscht werden sollen. Diese bitte bestätigen und die Seite neu laden. Danach einmal An- und Ausschalten, damit die Readings auch durch einen neuen Status initialisiert werden und die Seite im Browser neu laden.<br />
<br />
=== Shelly Plug S ===<br />
Über die Leistungsmessung des Shelly Plug S lässt sich sehr einfach auch eine Erkennung des Betriebszustandes des angeschlossenen Gerätes realisieren. Dazu stellt man zuerst fest, wieviel Leistung das Gerät in jedem Betriebszustand verbraucht und kann dann z.B. für einen angeschlossenen Fernseher, der im Standby 1 Watt und im Betrieb > 100 Watt verbraucht, den Zustand erkennen und als on/off Status anzeigen. Dazu wird das state Reading wie folgt definiert:<br />
attr readingList shellies/shellyplug-s-123456/relay/0/power:.* { { state => $EVTPART0<100?"off":"on" } }<br />
Der Status des MQTT2 Devices zeigt dann bei <100W "off" und sonst "on" an.<br />
<br />
=== HTTP-Commands ===<br />
In diesem {{Link2Forum|Topic=102369|LinkText=Forumsbeitrag}} wird eine Lösung vorgestellt, um über [[99 myUtils anlegen|myUtils-Code]] weitere Kommandos bereitzustellen, die sonst nur direkt über das Web-Interface zu erreichen sind.<br />
<br />
== Shelly Gen2 ==<br />
=== Vorbereitung ===<br />
Shelly mit dem WLAN verbinden, entweder über die Shelly APP oder per Laptop auf den Offenen AP des Shelly verbinden und dann übers WebUI des Shelly mit dem Heimischen WLAN verbinden. Über die APP geht dies meist etwas einfach und schneller, besonders wenn man mehrere Shelly Geräte hinzufügen möchte. Durch die BT Unterstützung der Gen2 Geräte, klappt dies meist auch deutlich schneller und zuverlässiger als noch bei Gen 1 Geräten. <br />
Nachdem der Shelly mit dem WLAN verbunden ist, sollte die Firmware überprüft und gegebenenfalls aktualisiert werden (Stand Anfang 2022 scheint die firmware noch nicht voll ausgereift gewesen zu sein, da dass insbesondere die MQTT-Schnittstelle immer wieder überarbeitet wurde). Bitte KEINE BETA Versionen installieren, wenn nicht dazu aufgefordert wurde.<br />
Nach dem, durch das Update ausgelösten, Neustart kurz Prüfen ob die Uhrzeit passt, wenn trotz richtiger Zeitzone die Uhrzeit nicht stimmt hilft ein weiterer Neustart.<br />
Nun auf Networks| Internet (leider in APP und WebUI unterschiedlich), hier auf MQTT und die Einstellungen für den verwendeten MQTT Server treffen. Diese Einstellungen werden auch wieder durch Neustart übernommen.<br />
=== Shelly Plus 1 ===<br />
Zunächst muss man einen Statusupdate des Shelly erzwingen (Aus- und Einschalten, physikalisch oder per Web-UI), damit das Gerät bei eingeschaltetem autocreate angelegt wird. Dies sieht zunächst so aus:<br />
<syntaxhighlight lang="text"><br />
defmod MQTT2_shellyplus1_441793a34044 MQTT2_DEVICE shellyplus1_441793a34044<br />
attr MQTT2_shellyplus1_441793a34044 readingList shellyplus1_441793a34044:shellyplus1-441793a34044/online:.* online\<br />
shellyplus1_441793a34044:shellyplus1-441793a34044/status/mqtt:.* { json2nameValue($EVENT) }\<br />
shellyplus1_441793a34044:shellyplus1-441793a34044/events/rpc:.* { json2nameValue($EVENT) }\<br />
shellyplus1_441793a34044:shellyplus1-441793a34044/status/sys:.* { json2nameValue($EVENT) }\<br />
shellyplus1_441793a34044:shellyplus1-441793a34044/status/switch_0:.* { json2nameValue($EVENT) }<br />
attr MQTT2_shellyplus1_441793a34044 room MQTT2_DEVICE<br />
<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 IODev m2s<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 available_updates_beta_version 0.10.0-beta6<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 cfg_rev 7<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 connected true<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 dst shellyplus1-441793a34044/events<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 fs_free 237568<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 fs_size 458752<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 id 0<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 mac 441793A34044<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 method NotifyStatus<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 online true<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 output false<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_mqtt_connected true<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 params_switch_0_id 0<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 params_switch_0_output false<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 params_switch_0_source WS_in<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_switch_0_temperature_tC 39.88<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_switch_0_temperature_tF 103.78<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 params_sys_available_updates_beta_version 0.10.0-beta6<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 params_ts 1646474952.66<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_wifi_rssi -57<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_wifi_ssid WLAN-Alex<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_wifi_sta_ip 192.168.177.167<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:24 params_wifi_status got ip<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 ram_free 179764<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 ram_size 249456<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 restart_required false<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 source WS_in<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 src shellyplus1-441793a34044<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 temperature_tC 39.9<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:09:12 temperature_tF 103.9<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 time 11:08<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 unixtime 1646474911<br />
setstate MQTT2_shellyplus1_441793a34044 2022-03-05 11:08:31 uptime 7<br />
</syntaxhighlight><br />
<br />
Über die set Anweisung unterhalb der Device Übersicht können wir ein attrTemplate wählen; shellyPlus_1<br />
Es erscheint eine kurze Übersicht was im Template enthalten ist, dieses befindet sich noch im Aufbau und wird aktuell von der Community aufgebaut und weiterentwickelt. Mit einem Klick auf „set“ laden wir das Template und übernehmen die Einstellungen für den Shelly Plus 1.<br />
Damit ist der Shelly bereit, im Status wird neben dem Namen auch der Onlinestatus des Shellys (grüner | roter Punkt) so wie eine Lampe mit Toggle (on | off) Funktion und die Temperatur des Shellys angezeigt. Darüber hinaus verschwindet die Lampe und wird durch einen klickbaren Hinweis ersetzt, wenn ein Neustart des Shellys nötig ist.<br />
<br />
=== Tipps ===<br />
{{Randnotiz|RNTyp=g|RNText=So nimmt man bei Verwendung eines normalen Schalters (eine Stellung EIN eine AUS) gerne den „Flip“ Mode – damit wird der Shelly IMMER umgeschaltet, egal in welche Stellung der Schalter sich bewegt („Kreuzschaltung“). Diese Einstellungen trifft man grundlegend im WebUI des Shelly (oder APP) unter „Channel settings“.<br />
Für den „Flip“ müssen wir die Grundeinstellung des „Power on default“ auch ändern (gleiche Seite) - persönlich wähle ich „Restore last“, also: nach Stromausfall wird der letzte Zustand wieder hergestellt; grundsätzlich gehen alle Modi außer „Match input“.<br />
}}<br />
Das aktuelle Template wurde um die Funktion erweitert, den Button Mode umzuschalten. In den meisten Fällen legt man sich auf eine Schaltmethode fest, welche zum Hardware Setup passt.<br />
<br />
Manchmal will man aber vielleicht den Hardware Schalter deaktivieren, nennen wir es „Kindersicherung“. Bei Shelly heißt das „detached“.<br />
Diese Funktion wurde ins Template als „in_mode“ Übernommen. Mögliche set Befehle sind „flip“, „detached“ „toggle“. Bedingung zur Verwendung ist: „relay power on default“ darf NICHT „Match input“ sein. Sollte Follow statt Flip bevorzugt werden, müsste entsprechende Zeile in der setList von „flip“ auf „follow“ angepasst werden.<br />
<br />
Der Befehlt lässt sich mit dem webCmd in_mode auch schnell zugänglich in die Übersicht vom Shelly setzen, so erhält man neben dem Status ein Dropdown mit flip detached und toggle zum schnellen umschalten. Mit webCmdLabel kann man noch einen Namen für das Dropdown setzen.<br />
<br />
== OpenMQTTGateway ==<br />
Um verschiedene Systeme wie BLE usw. auf MQTT zu bringen bietet sich [https://github.com/1technophile/OpenMQTTGateway OpenMQTTGateway] an, z.B. wird für das Auslesen vieler BLE-Seonsoren lediglich ein ESP32-Board ohne Zusatzhardware (ab ca. 5,- Euro in Fernost erhältlich) benötigt, auf das dann eine vorkompilierte firmware geflasht wird (hierfür wird ein USB-seriell-Wandler benötigt).<br />
<br />
Nähere Details sind im Artikel [[OpenMQTTGateway]] zu finden.<br />
<br />
== 8-Port-Ethernet Board ==<br />
<gallery><br />
datei:8-relais-ethernetboard closed.jpg|mit Gehäuse<br />
datei:8-Port-MQTT-Relais-Board.jpg|ohne Gehäuse<br />
</gallery><br />
In diesem {{Link2Forum|Topic=107536|Message=1016379|LinkText=Forenbeitrag}} bzw. dem betreffenden Thread wurde ein Relais-Board vorgestellt, mit dem 8 Relais über Ethernetkabel verbunden werden, die Kommunikation erfolgt dann über MQTT. Über die verwendete Software ist wenig bekannt, es könnte jedoch sein, dass diese Art der Einbindung auch bei weiteren Boards funktioniert, die einen bestimmten Ethernet-Chipset von TI (DP83848) und eine Cortex M3 MCU verwenden.<br />
<br />
== Milight-Bridge ==<br />
=== Vorbemerkung ===<br />
Der [https://github.com/sidoh/esp8266_milight_hub esp8266_milight_hub] ist ein open source- Projekt, mit dem auf Basis von ''openmili'' eine Vielzahl von MiLight-Geräten gesteuert werden können. Der MiLight-Hub erstetzt dabei eine beliebige Zahl von Milight-Bridges und ist auch zu verschiedenen Versionen des MiLight-Protokols kompatibel.<br />
Neben MQTT kann dieser auch mit HTTPMOD oder Wifilight (bzw. den MiLight-Modulen) gesteuert werden. Die Hardware entspricht dabei im Wesentlichen einem MySensors-Wifi-Gateway<ref>Es wird lediglich ein anderer CS-PIN genutzt. Dies kann einfach in der Web-Oberfläche der Firmware umgestellt werden.</ref>.<br />
Hier wird vorausgesetzt, dass eine funktionierende Bridge vorhanden ist.<br />
Der Vorteil der MQTT-Lösung liegt darin, dass man bei kompatiblen Fernbedienungen auch direkt Informationen über Schaltvorgänge erhält, die mit der Fernbedienung ausgelöst werden.<br />
<br />
=== Einstellungen am MiLight-Hub ===<br />
Die zum FHEM-Server bzw. dem MQTT2_SERVER passenden Vorgaben sind im Web-Interface des Hub einzustellen. Gegebenenfalls passen Sie die vom Hub zurückzugebenden Elemente im Web-Interface des Hub an.<br />
Die Einstellungen für ''MQTT topic pattern'' usw. können auf den default-Werten<ref>Diese sind: <br>''milight/:device_id/:device_type/:group_id'' für "topic pattern"<br>''milight/updates/:hex_device_id/:device_type/:group_id'' für "update topic pattern"<br>''milight/states/:hex_device_id/:device_type/:group_id'' für "state topic pattern". Der Autor hat derzeit folgende Infotypen zum Senden markiert: "status, brightness, hue, color, mode, color_temp, bulb_mode, computed_color, hex_color" (enthält eventuell zu viele Angaben. Bei einem Eventhandler muss man uU. darauf achten, dass kurz hintereinander zweimal dasselbe Event kommen kann (für ON/OFF)).</ref> belassen werden, für die seit Mitte 2019 vorhandene Option, eine LWT-Message zu senden (''MQTT Client Status Topic''), tragen Sie ''milight/LWT'' ein und aktivieren ''Detailed''.<br />
<br />
=== FHEM-Devices ===<br />
[[Bild:MQTT2 MiLight.png|400px|thumb|Milight: Darstellung in FHEMWEB]]<br />
==== Bridge ====<br />
Wird nun über den Hub oder eine von diesem erkannte Fernbedienung ein vorhandenes Leuchtmittel geschaltet, wird bei eingeschaltetem autocreate ein erstes Device erstellt, die zunächst erstellte Definition sieht typischerweise etwa so aus:<br />
defmod MQTT2_milight_hub_1370325 MQTT2_DEVICE milight_hub_1370325<br />
attr MQTT2_milight_hub_1370325 IODev MQTT2_FHEM_Server<br />
attr MQTT2_milight_hub_1370325 readingList milight_hub_1370325:milight/updates/0xBE59/rgbw/1:.* { json2nameValue($EVENT, '1_', $JSONMAP) }<br />
attr MQTT2_milight_hub_1370325 room MQTT2_DEVICE<br />
<br />
Auf dieses Device wird nun das ''template'' '''esp_milight_hub_bridge''' angewandt.<br />
<br />
==== Einzelne Leuchtmittel ====<br />
<br />
Wird nun nochmals das oben verwendete Leuchtmittel geschaltet, erstellt autocreate ein weiteres Device:<br />
defmod MQTT2_milight_0xBE59_1 MQTT2_DEVICE milight_0xBE59_1<br />
attr MQTT2_milight_0xBE59_1 IODev MQTT2_FHEM_Server<br />
attr MQTT2_milight_0xBE59_1 readingList milight/states/0xBE59/rgbw/1:.* { json2nameValue($EVENT, '1_', $JSONMAP) }<br />
attr MQTT2_milight_0xBE59_1 room MQTT2_DEVICE<br />
<br />
Auf dieses wird nun eines der Bulb-templates angewendet. Wählt man das template X_01_esp_milight_hub_rgbw_bulb, wird eine einfache Variante erstellt, die neben einem toggelnden Icon nur Regler für Helligkeit, die Farbe und zwei Schaltflächen für den Weiß- und Nachtmodus enthält. Wer mehr oder andere Steuerelemente erhalten möchte, verwendet ein anderes template. Nicht benötigte Elemente kann man dabei einfach aus der Definition löschen.<br />
<br />
Alle weiteren Devices werden genauso erstellt. <br />
<br />
Um ein Device zu erhalten, mit dem sich alle Kanäle gleichzeitig steuern lassen, kann das template ''X_01a_esp_milight_hub_make_rgbw_group'' verwendet werden. Dieses verändert nicht das aktuelle Device, sondern erstellt '''eine Kopie''', die dann modifiziert wird. Diese Kopie ist unter dem Namen ''milight_<RemoteID>_0'' im selben Raum zu finden wie das Ausgangsgerät und kann ebenfalls an die eigenen Wünsche angepasst werden. <br />
<br />
Weitere Beispiele:<br />
Beispiel für ein RGB-CCT-Device:<br />
defmod Licht_Wz_all MQTT2_DEVICE<br />
attr Licht_Wz_all IODev MQTT2_Broker<br />
attr Licht_Wz_all eventMap /set_white:Weiss/night_mode:Nacht/white_mode:white/on:on/off:off/ON:on/OFF:off/next_mode:Mode/mode_speed_up:Up/mode_speed_down:Down/<br />
attr Licht_Wz_all group Licht<br />
attr Licht_Wz_all icon light_control<br />
attr Licht_Wz_all readingList milight/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\<br />
milight/updates/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\<br />
milight/states/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\<br />
<br />
attr Licht_Wz_all room Wohnzimmer<br />
attr Licht_Wz_all setList on milight/0x5D02/rgb_cct/0 {"status":"ON"}\<br />
off milight/0x5D02/rgb_cct/0 {"status":"OFF"}\<br />
level milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
hue:colorpicker,HUE,0,1,359 milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
command:uzsuSelectRadio,Weiss,Nacht,Mode,Up,Down milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
brightness:colorpicker,BRI,0,1,255 milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
next_mode milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
mode_speed_up milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
mode_speed_down milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
saturation:colorpicker,BRI,0,1,100 milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
color_temp:colorpicker,CT,153,1,370 milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
device_id milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
effect milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
mode milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}\<br />
commands milight/0x5D02/rgb_cct/0 {"$EVTPART0":"$EVTPART1"}<br />
attr Licht_Wz_all sortby 1<br />
attr Licht_Wz_all webCmd command:brightness:saturation:color_temp:hue<br />
attr Licht_Wz_all webCmdLabel command\ <br />
:brightness:saturation\<br />
:color_temp:hue<br />
==== Ein Leuchtmittel, mehrere Fernbedienungen ====<br />
Pairt man mehrere Fernbedienungen mit einem Leuchtmittel, sollten auch alle entsprechenden Fernbedienungscodes in das readingList-Attribut übernommen werden. Dazu übernimmt man am einfachsten die Einträge aus den zusätzlichen MQTT2_DEVICEs. Benötigt man das zusätzliche Device nicht separat, um z.B. eine getrennte Gruppenschaltung zu realisieren, kann man dieses löschen. Beispiel-readingList für ein Device, das auf zwei Fernbedienungscodes und zwei Gruppen "hört":<br />
<br />
attr Licht_Wz_all readingList milight/states/0x1234/rgbw/2:.* {json2nameValue($EVENT) }\<br />
milight/updates/0x1234/rgbw/2:.* { json2nameValue($EVENT) }\<br />
milight/states/0x1234/rgbw/0:.* { json2nameValue($EVENT) }\<br />
milight/updates/0x1234/rgbw/0:.* { json2nameValue($EVENT) }\<br />
milight/states/0xABCD/rgbw/0:.* { json2nameValue($EVENT) }\<br />
milight/updates/0xABCD/rgbw/0:.* { json2nameValue($EVENT) }\<br />
milight/states/0xABCD/rgbw/4:.* { json2nameValue($EVENT) }\<br />
milight/updates/0xABCD/rgbw/4:.* { json2nameValue($EVENT) }<br />
<br />
==== Fernbedienung als Input-Device nutzen ====<br />
In diesem {{Link2Forum|Topic=103493|LinkText=Thread}} ist dargestellt, wie man eine Fernbedingung des Typs FUT089 dazu verwenden kann, einen [[MPD]] oder Rollladenaktoren zu steuern, oder diese Fernbedienung für [[Hue#HUE-Device|HUEDevice]]-Leuchtmittel zu nutzen.<br />
Um hier nur Differenz-Meldungen direkt an die betreffende myUtils-Funktion zu übergeben und doppelte Events zu verhindern, sollte hier die readingList so angepasst werden, dass nur Messages aus dem "updates"-Zweig ausgewertet werden: <br />
defmod MiLight_RC1_0 MQTT2_DEVICE milight_0xABCD_0<br />
attr MiLight_RC1_0 readingList milight/states/0xABCD/fut089/[0-8]:.* {}<br />
milight/updates/0xABCD/fut089/0:.* { FHEM::attrT_MiLight_Utils::MPDcontrol('myMPD',$EVENT, 'Yamaha_Main') }\<br />
milight/updates/0x5D47/fut089/1:.* { FHEM::attrT_MiLight_Utils::FUT_to_RGBW('Licht_Stehlampe_links',$EVENT) }\<br />
milight/updates/0x5D47/fut089/2:.* { FHEM::attrT_MiLight_Utils::FUT_to_RGBW('Licht_Stehlampe_rechts',$EVENT) }\<br />
milight/updates/0x5D47/fut089/3:.* { FHEM::attrT_MiLight_Utils::four_Lights_matrix($EVENT, 'Licht_WoZi_Vorn_Aussen', 'Licht_WoZi_Vorn_Mitte', 'Licht_WoZi_Hinten_Aussen', 'Licht_WoZi_Hinten_Mitte') }\<br />
milight/updates/0x5D47/fut089/4:.* { FHEM::attrT_MiLight_Utils::shuttercontrol('Jalousie_WZ',$EVENT) }\<br />
milight/updates/0x5D47/fut089/5:.* { FHEM::attrT_MiLight_Utils::shuttercontrol('Rollladen_WZ_SSO',$EVENT) }\<br />
milight/updates/0x5D47/fut089/6:.* { FHEM::attrT_MiLight_Utils::shuttercontrol('Rollladen_WZ_SSW',$EVENT) }\<br />
milight/updates/0x5D47/fut089/7:.* {}\<br />
milight/updates/0x5D47/fut089/8:.* {}<br />
attr MiLight_RC_WZ stateFormat CommandSet<br />
<br />
<br />
== eBus ==<br />
An dieser Stelle sollen lediglich die Grundzüge erläutert werden, eine ausführliche Anleitung über die Konfiguration des [[EBUS-MQTT2|eBus mit MQTT2 gibt es hier]].<br />
<br />
=== Vorbereitung und Definition am eBus ===<br />
Vorausgesetzt wird ein laufender eBus-Dämon. Dessen Einrichtung wird im Artikel [[EBUS#Software|EBUS]] beschrieben.<br />
In der Konfiguration des Dämons ( /etc/default/ebusd ) ist die Kommunikation über MQTT zu aktivieren und die Topic-Struktur festzulegen, z.B. ''ebusd/%circuit/%name''.<br />
--accesslevel=* --mqttport=1883 --mqttjson --mqtthost=IpAdresseMQTTSERVER --mqtttopic=ebusd/%circuit/%name<br />
{{Hinweis|Nachfolgend wird davon ausgegangen, dass als Vorgabe für mqtttopic ''ebusd'' verwendet wurde. Dies kann geändert werden, es wird aber dringend empfohlen, das mqtttopic in jedem Fall mit ''ebus...'' zu beginnen!}}<br />
<br />
=== Vorbereitung und Definition in FHEM ===<br />
Unabhängig von dem konkret genutzten IO-Modul (MQTT2_SERVER oder MQTT2_CLIENT) sollte an diesem '''''vor''''' den nachfolgenden Schritten zunächst das autocreate ausgeschaltet werden. Weiter sollte geprüft werden, ob es bereits MQTT2_DEVICE-Geräte gibt, die Einträge in der ''readingList'' enthalten, die vom ebus stammen. Da wir die ''readingList'' anschließend mit erweiterten JSON-Optionen erstellen wollen, müssen zumindest sämtliche ''readingList''-Attribute entsprechend bereinigt oder gelöscht werden; in der Regel ist es einfacher, diese Geräte nach dem Deaktivieren des autocreate am IO zu löschen.<br />
{{Randnotiz|RNTyp=y|RNText=Sollten Sie MQTT2_CLIENT als IO nutzen, sollte für das weitere Vorgehen eine Kopie des MQTT2-"Sammeldevices" genutzt werden, und dessen ''CID'' auf ''ebusd'' geändert werden. Nach Anwendung des ebusd-splitter-templates müssen dann alle den ebus betreffenden Einträge aus der ''readingList'' des "Sammeldevices" gelöscht werden oder diese ganz gelöscht.}}Ist der ebus-Dämon lauffähig und für MQTT konfiguriert, sendet dieser regelmäßige Messages. <br />
<br />
Sind die Vorbereitungen abgeschlossen, aktivieren wir ''autocreate'' wieder, allerdings wählen wir als autocreate-Methode ''complex'' aus, da der eBus-Dämon teilweise<ref>Dies betrifft vorrangig die Statusmeldungen</ref> eine weiter verschachtelte JSON-Struktur zum Versenden der Informationen verwendet als üblich. Danach wird wie bei den anderen o.g. Geräten automatisch ein neues MQTT2_DEVICE angelegt<ref>Bei Verwendung des MQTT2_CLIENT wird dann die ''readingList'' am bereits definierten MQTT2_DEVICE aus der Kopie des "Sammeldevice" automatisch wieder erstellt bzw. gefüllt.</ref><br />
<br />
==== "ebus-Bridge" ====<br />
Auf das von ''autocreate'' erstellte MQTT2_DEVICE wird nunmehr das template ''eBus_daemon_splitter'' angewendet. Nach einiger Zeit sollte sowohl die readingList an diesem Device erweitert worden sein, wie auch ein oder mehrere neue MQTT2_DEVICE-Geräte angelegt. <br />
Dieses Device liefert zukünftig Readings zum Dämon selbst, wie dessen ''uptime'', alle weiteren am eBus angeschlossenen Teilnehmer werden dagegen zweckmäßigerweise durch ein oder mehrere weitere MQTT2_DEVICE-Geräte dargestellt. <br />
<br />
Das ''attrTemplate'' läd eine weitere ''attrTemplate''-file und [[99 myUtils anlegen|99_myUtils-Code]] vom FHEM-Server nach. Beides steht dann auch unmittelbar zur Nutzung zur Verfügung. <br />
==== "ebusd_bai" und weitere Geräte ====<br />
{{Hinweis|Der eBus-Dämon sendet nicht alle Informationen zu allen am eBus angeschlossenen Geräte automatisch. Diese müssen teilweise erst aktiv angefragt werden. Wie das im einzelnen erfolgen kann, ist dem o.g. Detailartikel zu entnehmen.}}<br />
Funktioniert die Kommunikation zwischen dem eBus-Dämon und FHEM, sollte nach einigen Minuten zumindest ein weiteres Gerät namens ''MQTT2_ebus_bai'' angelegt worden sein.<br />
<br />
== Sonos2Mqtt ==<br />
Aus einem Versuch heraus ist ein {{Link2Forum|Topic=111711|LinkText=kleines Projekt}} geworden: Die Sonos Umgebung mit Hilfe von sonos2mqtt als generisches MQTT2_DEVICE komfortabel in FHEM einzubinden.<br />
<br />
Mit Hilfe von ein paar Templates ist die grundlegende Einbindung in FHEM nach einer kleinen Installation auf Systemebene schnell erledigt. Es läuft derzeit noch zahlreiche Entwicklung und Ideenfindung, die Fortschritte sind live im Thread oder [[Sonos2mqtt|konsolidiert im Wiki]] zu finden.<br />
<br />
=== Setup im System ===<br />
Für dies Funktion wird der nodejs Server [https://github.com/svrooij/sonos2mqtt sonos2mqtt] benötigt. Entweder installiert man den lokal, irgendwo im Netzwerk oder nutzt den [[MQTT2-Module - Praxisbeispiele#Verwendung des Docker Containers|Docker Container.]]<br />
<br />
Der nodejs Server sonos2mqtt kann aus Sicht von FHEM irgendwo im Netzwerk stehen - aber er muss im gleichen Netzwerk wie die Sonosplayer stehen. Das UPNP Sonosnetzwerk funktioniert nicht über Netzwerksegmente hinweg.<br />
<br />
Eine Beschreibung aller Startparameter für sonos2mqtt findet man [https://svrooij.io/sonos2mqtt/getting-started.html in der offiziellen Doku].<br />
<br />
Erreicht der nodejs Server sonos2mqtt den MQTT Server nicht über - default: localhost, Port 1883, keine Anmeldung" - muss der Parameter --mqtt gesetzt werden! <br />
<br />
Beispiele:<br />
:<code>--mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800</code> # alles gesetzt<br />
:<code>--mqtt mqtt://192.168.0.3:1800</code> # IP Adresse und Port gesetzt, keine Anmeldung am MQTT Server<br />
:<code>--mqtt mqtt://192.168.0.3</code> # IP Adresse gesetzt, Port ist Standard 1883<br />
<br />
Erfolgt der Start mit pm2, werden die Parameter mit einem ''zusätzlichen'' doppelten Bindestrich (--) hinter dem nodejs Modul übergeben.<br />
<br />
Beispiel:<br />
<syntaxhighlight lang="perl"><br />
pm2 start sonos2mqtt -- --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800<br />
</syntaxhighlight><br />
<br />
'''Lokales Setup'''<br />
<br />
Voraussetzung: nodejs und pm2 ist installiert und für alle Benutzer verfügbar. <syntaxhighlight lang="bash"><br />
sudo npm install -g sonos2mqtt<br />
</syntaxhighlight><br />
Je nach Entwicklungsstand sind auch Betaversionen verfügbar. Für aktuelle Betaversionen wird dieser Zusatz beim Setup verwendet. -> sonosmqtt@3.1.0-beta.1<br />
<br />
Wird der sonos2mqtt Server auf einer anderen Maschine eingerichtet, ist der Start entsprechend diesem Absatz [[MQTT2-Module - Praxisbeispiele#Autostart von sonos2mqtt im System mit pm2 .28Alternative.29|Autostart von Sonos2mqtt im System mit pm2]] einzurichten.<br />
<br />
=== Setup in FHEM ===<br />
Man definiert lediglich ein Bridge Device, der Rest wird automatisch erledigt.<br />
<br />
Voraussetzung: <br />
* autocreate im System ist aktiv. <br />
* Der verwendete MQTT2_SERVER steht auf '''autocreate simple''' (default/Standard).<br />
* Templates aktuell - FHEM uptodate oder bei Bedarf in der FHEM Kommandozeile aktualisieren:<br />
<pre><br />
{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }<br />
</pre><br />
Bei der Anwendung des Templates für die Bridge wird das Attribut devicetopic ausgelesen oder auf default sonos gesetzt! <br />
<br />
Wird ein anderer Devicetopic verwendet, muss der bei der Anlage der Bridge gesetzt werden!<br />
<br />
Diese Zeilen einzeln in der FHEM Kommandozeile oder als Block in der Raw Definition. <syntaxhighlight lang="perl"><br />
define SonosBridge MQTT2_DEVICE<br />
attr SonosBridge room MQTT2_DEVICE<br />
set SonosBridge attrTemplate sonos2mqtt_bridge_comfort<br />
</syntaxhighlight><br />
Das Template sonos2mqtt_bridge_comfort:<br />
* setzt das Template sonos2mqtt_bridge auf das Device,<br />
* lädt die Datei 99_sonos2mqttUtils.pm aus dem contrib Ordner nach,<br />
* definiert ein notify, dies erledigt im weiteren Betrieb die automatische Konfiguration der automatisch erzeugten MQTT2_DEVICEs. <br />
** mit dem Template sonos2mqtt_speaker (das Template kann auch manuell auf vorhandene Player angewendet werden, die automatische Erzeugung der Player wird aber empfohlen)<br />
** Ermittelt Detailinformation des jeweiligen Players (vor allem IP Adresse und Modelnumber)<br />
** Lädt die Sonosgeräte Icons von den UPNP Devices herunter<br />
** erweitert das setList input Kommando um den TV Eingang (HDMI, spdif) bzw. Line_IN Eingang falls vorhanden (Modelnumber)<br />
* Die Player werden automatisch einzeln erzeugt wenn sie mqtt Nachrichten senden (Play/Stop) oder (alle sofort) wenn der sonos2mqtt Server gestartet wird. <br />
<br />
==== Wozu dient die Bridge? ====<br />
Sie stellt ein paar wesentliche Funktionen zu Verfügung<br />
# Auffangen von nicht benötigten MQTT Nachrichten.<br />
# Erzeugung/Weiterleitung von Nachrichten für die einzelnen Player - damit auch die Erzeugung von separaten Playern nach dem Schema MQTT2_RINCON12345678901234567.<br />
# Statusanzeige sonos2mqtt als Reading connected (0 offline, 1 connected, 2 Player connected).<br />
Sie kann zusätzlich als zentrales Device verwendet werden, um die Sonos Umgebung abzubilden, z.B. Readings für Favoriten u.ä.<br />
<br />
==== Start sonos2mqtt lokal ====<br />
Der Start / Stop des sonos2mqtt Servers innerhalb von FHEM ist nur lokal simpel möglich. Ist der Server irgendwo im Netzwerk oder im Docker Container, muss man andere Möglichkeiten finden. Der Neustart aus FHEM ist zwar praktisch, aber nicht erforderlich. <br />
<br />
Wird eine existierenden Sonos Landschaft inhaltlich verändert (Player dazu/weg), muss der Server neu gestartet werden. Werden Player temporär abgeschaltet, merkt das der Server nach einer Zeit selbst, oder man forciert dies mit einem CheckSubscription an der Bridge.<br />
<br />
Soll das Modul sonos2mqtt mit seinen default Einstellungen gestartet werden, genügt dieser kurze Befehl (in der FHEM Kommandozeile):<br />
<syntaxhighlight lang="bash"><br />
"pm2 start sonos2mqtt"<br />
</syntaxhighlight><br />
Tipp: Verwendet man anstatt "Befehl" den Syntax {qx(Befehl)} in der FHEM Kommandozeile, wirkt der Befehl zwar blockierend aber die Ausgabe erfolgt im Browser und nicht im Logfile. Mit dem Parameter -s erfolgt keine Ausgabe.<br />
<br />
==== Autostart von sonos2mqtt mit FHEM ====<br />
Der Code startet sowohl das sonso2mqtt Modul sofort und implementiert ein notify für den zukünftigen automatischen Start beim Start von FHEM.<br />
<syntaxhighlight lang="perl"><br />
define n_pm2_sonos notify global:INITIALIZED|n_pm2_sonos:start "pm2 -s start sonos2mqtt"<br />
trigger n_pm2_sonos start<br />
</syntaxhighlight> <br />
<br />
=== Autostart von sonos2mqtt im System mit pm2 (Alternative) ===<br />
Der obige Code startet das sonos2mqtt nodejs Modul mit pm2 beim Start von FHEM. Sollte das nicht funktionieren oder nicht ins gesamte Konzept passen (weil z.B. mehrere nodejs Module geladen werden) kann der automatische Start direkt im System erfolgen. Zunächst dafür das oben eventuell schon definierte notify löschen!<syntaxhighlight lang="perl"><br />
delete n_pm2_sonos<br />
</syntaxhighlight>Der Start des Modul muss nicht mit erhöhten Rechten geschehen! Im Terminal folgendes eingeben (unter dem angemeldeten Benutzer wird sonos2mqtt später immer gestartet):<syntaxhighlight lang="bash"><br />
pm2 start sonos2mqtt<br />
pm2 startup<br />
</syntaxhighlight><br />
Der letzte Befehl "redet", d.h. es gibt eine Ausgabe in der Art:<br />
<syntaxhighlight lang="bash"><br />
[PM2] To setup the Startup Script, copy/paste the following command:<br />
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi<br />
</syntaxhighlight><br />
Man tut einfach genau das, was dasteht: die letzte Zeile kopieren und wieder einfügen und ausführen. Danach muss man die Konfiguration von pm2 noch sichern:<br />
<syntaxhighlight lang="bash"><br />
pm2 save<br />
</syntaxhighlight><br />
<br />
=== Verwendung des Docker Containers ===<br />
Beim Container findet die Konfiguration der Verbindung zum FHEM in den Environment Variablen statt:<br />
<syntaxhighlight lang="perl"><br />
environment:<br />
- SONOS2MQTT_DEVICE=192.168.56.207 # hier muss einer der Sonos Lautsprecher stehen<br />
- SONOS2MQTT_MQTT=mqtt://192.168.56.121:1883 # mqtt2_server FHEM, erweiterter Syntax siehe oben<br />
- SONOS_LISTENER_HOST=192.168.56.121 # Docker host IP<br />
</syntaxhighlight><br />
<br />
=== Sonos2mqtt mit mehr Komfort ===<br />
Im Wiki Artikel [[Sonos2mqtt]] geht es weiter.<br />
<br />
== Owntracks GPS Tracking in FHEM ==<br />
Das hier gezeiget Beispiel verwendet eine MQTT Instanz im Internet, die mit einem MQTT2_CLIENT angebunden wird. Da wenig Traffic benötigt wird, genügt z.B. eine kostenfreie Instanz z.B. bei myqtthub (Stand. Dezember 2020)<br />
<br />
Alternativ kann man einen MQTT2_SERVER auch direkt verfügbar machen, wenn man sich sicher ist was man da tut! Siehe {{Link2Forum|Topic=99666|Message=1028576|LinkText=diesen Forenbeitrag}}. Das Bridge Device wird dabei genau so benötigt, nur der IODev ist dann der MQTT2_SERVER.<br />
<br />
=== owntracks auf dem Smartphone konfigurieren ===<br />
Menü / Einstellung / Verbindung <br />
<br />
Dort sind insgesamt 4 Registerkarten mit Werten zu füllen (Beispiel):<br />
* Modus -> MQTT<br />
* Hostname -> <br />
** Hostnamen: host.cloud.com <br />
** Port: 8883 <br />
** ClientID: ID vom Provider <br />
** WebSockets (nicht nutzen)<br />
* Identifikation -> <br />
** Benutzername: user-name <br />
** Passwort: user-password <br />
** GeräteID: mi6 (erscheint in FHEM im Device Namen verwendet)<br />
** TrackerID: hk (nur zweistellig, erscheint als ID in der owntracks Karte)<br />
* Sicherheit -> TLS aktivieren<br />
=== Definition in FHEM ===<br />
Der MQTT2_CLIENT wird so eingerichtet, man braucht eine andere ClientID als auf dem Smartphone! Stimmt alles sollte das Gerät sofort open anzeigen.<syntaxhighlight lang="perl"><br />
MQTT2_CLIENT einrichten, autocreate simpel<br />
define mqtt2Cloud MQTT2_CLIENT host.cloud.com:8883<br />
attr mqtt2Cloud SSL 1<br />
attr mqtt2Cloud autocreate simple<br />
attr mqtt2Cloud clientId fhem1<br />
attr mqtt2Cloud room MQTT2_IO<br />
attr mqtt2Cloud username user-name<br />
set mqtt2Cloud password user-password<br />
</syntaxhighlight>Für die automatische Erzeugung der Trackergeräte in FHEM richtig man zuerst ein Bridge Device ein:<syntaxhighlight lang="perl"><br />
define MQTT2_Cloud_bridge MQTT2_DEVICE<br />
attr MQTT2_Cloud_bridge IODev mqtt2Cloud<br />
attr MQTT2_Cloud_bridge autocreate 1<br />
attr MQTT2_Cloud_bridge room MQTT2_DEVICE<br />
</syntaxhighlight>Dies wird entweder mit dem Template allgemein konfiguriert<syntaxhighlight lang="perl"><br />
set MQTT2_Cloud_bridge attrTemplate MQTT2_CLIENT_general_bridge<br />
</syntaxhighlight>oder manuell nur für owntracks eingerichtet<syntaxhighlight lang="perl"><br />
attr MQTT2_Cloud_bridge bridgeRegexp owntracks/[^/]+/([^/:]+).* "owntracks_$1"<br />
</syntaxhighlight>MQTT2 Geräte für owntracks werden jetzt automatisch mit dem Namen MQTT2_owntracks_<GeräteID> erzeugt. Diese werden einfach mit dem Template owntracks_device fertig konfiguriert. Bei einem IOS Gerät kann man danach noch das Template owntracks_device_IOS als Erweiterung anwenden.<br />
<br />
==== Anwesenheitserkennung ====<br />
Die Anwesenheit kann im owntracks Device direkt für die selbst definierten Plätze abgelesen werden: entweder steht im reading place der jeweilige Ort oder away. Um hier noch eine gewisse Einheitlichkeit in der Verwendung zu bekommen kann man ein PRESENCE Device verwenden: <syntaxhighlight lang="perl"><br />
define OT_Mi6 PRESENCE event MQTT2_owntracks_mi6:place:.away MQTT2_owntracks_mi6:place:.<Home><br />
</syntaxhighlight>Im Move Modus erfolgt die Erkennung sehr schnell und damit einige Sekunden eher als eine BT Erkennung im Haus - der Akkuverbrauch steigt enorm. Im Significant Modus kann es schon mal ein paar Minuten dauern - ein relevanter Akku Verbrauch ist nicht erkennbar.<br />
<br />
== Allgemeine Hinweise ==<br />
=== MQTT2_SERVER und MQTT2_CLIENT für Debugging nutzen ===<br />
Nutzt man das rawEvents-Attribut am MQTT2-IO<ref>z.B. <code>attr MQTT2_FHEM_Server rawEvents .*</code>, der regex-Filter kann wie üblich angepasst werden</ref>, kann man den Datenverkehr des Servers am Event-Monitor mitschneiden. Dies ist insbesondere für unbekannte Geräte nützlich, deren Topic- und Payload-Struktur noch nicht bekannt ist.<br />
Um den kompletten MQTT Datenaustausch mitzuschneiden, kann man mit <code>attr mqtt2_server verbose 5</code> auch alles ins FHEM-Log schreiben lassen.<br />
<br />
=== autocreate funktioniert anscheinend nicht? ===<br />
In der Regel wird bei neu eingehenden MQTT-Messages über ''autocreate'' ein neues Device erstellt, wenn Nachrichten von einem bisher unbekannten Gerät kommen. Geschieht dies nicht, sollten folgende Punkte geprüft werden:<br />
# (nur bei MQTT2_SERVER:) Der Client muss eine ClientID angeben, diese darf nicht den defaults von ''mosquito_sub'' entsprechen.<br />
# Ein allgemeines {{Link2CmdRef|Anker=autocreate|Lang=en|Label=autocreate}}-Device (''TYPE=autocreate'') muss vorhanden und aktiv sein.<br />
# ''autocreate'' am IO muss eingeschaltet sein, was für MQTT2_SERVER bedeutet, dass es nicht auf "0" stehen darf (hier ist dann ''simple'' die aktive Voreinstellung), für MQTT2_CLIENT sollte ebenfalls ''simple'' verwendet werden; dies muss hier allerdings explizit gesetzt werden.<br />
<br />
Wird dann immer noch kein Device erstellt, gibt es in aller Regel ein Device, das bereits einen entsprechenden Eintrag in der readingList enthält, oder es sind keine Nachrichten eingegangen. Überprüfen Sie daher dann ggf. die Einstellungen am Client-Gerät (z.B. im Web-Interface des Shelly oder Tasmota-geflashten ESP8266).<br />
<br />
Das ''autocreate'' am Device schließlich bestimmt, ob die ''readingsList'' erweitert werden darf, wenn Informationen über bisher nicht über die readingList abgedeckte Topics empfangen werden und vom MQTT2-IO als zu diesem Device/ClientID gehörend identifiziert wurden.<br />
<br />
=== attrTemplate ===<br />
{{Randnotiz|RNTyp=Info|RNText=Die per attrTemplate jeweils erzeugten Konfigurationen sind Einrichtungsbeispiele, die v.a. eine in sich konsistenze Zusammenstellung der verschiedenen Attribute enthalten. Es steht jedem User frei, diese Ausgangsbasis dann nach seinem Belieben zu ändern. Spätere Änderungen des verwendeten attrTemplate wirken sich nicht automatisch auf die durch frühere Versionen oder den User nachkonfigurierte Geräte aus! Da es vorkommen kann, dass sich die per MQTT übermittelten Daten und Topics ändern, wenn z.B. eine firmware aktualisiert wurden, kann dies Anpassungen am jeweiligen Template erforderlich machen. Grundsätzlich sollen die per attrTemplate für MQTT2_DEVICE verfügbaren attrTemplate jeweils für die aktuellste verfügbare stabile firmware-Version passen.}}<br />
Zur Konfiguration von MQTT2_DEVICE-Geräten kann die Funktion ''[[AttrTemplate|attrTemplate]]'' genutzt werden. <br />
Die Anwendung für MQTT2_DEVICE ist [[MQTT2 DEVICE#attrTemplate|hier]] beschrieben.<br />
<br />
<br />
{{Hinweis|In einigen Fällen kann es vorkommen, dass die template-Bezeichnung zwischenzeitlich geändert wurde. Seit 21.09.2019 erfolgt die Sortierung der auswählbaren templates nicht mehr nur nach den Namen, so dass die entsprechenden Namensbestandteile entfallen sind, die einer besseren Sortierung dienten.}}<br />
<br />
=== attrTemplate: Es werden nicht alle templates angezeigt ===<br />
Siehe Beitrag [[AttrTemplate#Warum finde ich das Template xyz nicht.3F|AttrTemplate: Warum finde ich das Template xyz nicht.]]<br />
<br />
=== attrTemplate und Sprachsteuerung ===<br />
Konfiguriert man MQTT2_DEVICE-Geräte mit attrTemplate, werden in der Regel auch direkt die für die Sprachsteuerung der Geräte erforderlichen Attribute mit gesetzt. Weiterführende Hinweise sind auch zu diesem Teilaspekt von ''[[AttrTemplate|attrTemplate]]'' dem betreffenden Hauptartikel zu entnehmen.<br />
<br />
=== bridgeRegexp ===<br />
[[Datei:Mqtt2 server.png|300px|thumb|left|Logische Verortung der bridgeRegexp-Angaben]]{{Randnotiz|RNTyp=y|RNText=Beachten Sie, dass aufgrund des geschilderten Prinzips eine Änderung einer bridgeRegexp bei einem Gerät auch dazu führt, dass alle Readings eines Geräts und alle readingList-Einträge gelöscht werden.}}Üblicherweise werden alle Informationen, die aus einer Quelle stammen auch '''''einem''''' ''MQTT2_DEVICE'' zugeordnet, wobei im Falle des dort nicht aktivierten autocreate-Attributs entsprechende readingList-Einträge erzeugt werden. In dem nebenstehenden Schaubild wären dies die Geräte ''A'' bis ''D''. Das '''Attribut''' ''bridgeRegexp'' kann dazu genutzt werden, um neue, bisher unbekannte Topic-Strukturen im Rahmen des autocreate-Vorgangs anders zu strukturieren. Diese werden dabei im Ergebnis einem '''anderen Device''' (das ggf. erst erstellt wird) zugeschlagen, sollte eine zu der topic-Struktur passende regex in diesem Attribut gesetzt sein. Für dessen CID und die Bildung des Names wird die im 2. Teil jedes Eintrags als ''newClientId'' hinterlegte Angabe verwendet. In nebenstehendem Schaubild ist dies exemplarisch für die Gerätegruppe ''D'' mit dem ''bridge''-Device ''D'' und dessen ''Satelliten'' ''D1'' bis ''D4'' dargestellt.<br />
Dementsprechend sind in den hier aufgeführten Beispielen ''bridgeRegexp''-Attribute immer dort zu finden, wo ein Gerät oder Dienst dazu dient, mit weiteren, ggf. auf andere Weise kommunizierende Geräte oder Baugruppen zu kommunizieren, wie z.B. für über hier dargestellten ''zigbee2mqtt'' oder ''zigbee2tasmota''. Ein Sonderfall hierbei ist das template ''MQTT2_CLIENT_general_bridge'' zur Verwendung mit dem [[MQTT2_CLIENT#Anwendung|MQTT2_CLIENT]], denn aus dessen Sicht stammen alle Informationen aus derselben Quelle, nämlich z.B. dem ''mosquitto''-Server und würden sonst alle einem einem MQTT2_DEVICE zugewiesen.<br />
<br />
=== Ständig neue Devices? ===<br />
MQTT2_SERVER kann zwischen verschiedenen Geräten auch anhand der ClientID unterscheiden. Für jedes neu erkannte Gerät wird auch ein eigenes MQTT2_DEVICE angelegt. Abhilfemaßnahmen:<br />
==== Vergabe einer ClientID ====<br />
Die meisten MQTT-fähigen Geräte enthalten Optionen zur Vergabe einer eindeutigen ClientID (siehe das Beispiel des zigbee2mqtt-Dienstes oben). <br />
Wird keine ClientID vergeben, verwenden manche Clients für jede Verbindung wieder neue ID's. Es wird empfohlen, möglichst von diesen Einstelloptionen Gebrauch zu machen.<br />
<br />
==== Löschen der ClientID aus der readingList usw. ====<br />
Ist dies nicht möglich oder erwünscht, kann man auch die ClientID aus den readingList-, setList- und getList-Attributen entfernen. Dies ist jedenfalls solange unschädlich als nicht mehrere Geräte identische Topic-Pfade verwenden (daher die Empfehlung, insbesondere bei Tasmota-Geräten den ''default'' "sonoff" zu ändern).<br />
Beispielsweise wäre <code>attr Milight_Bridge readingList milight_hub_1370325:milight/LWT:.* {json2nameValue($EVENT) }</code> zu ändern in <code>attr Milight_Bridge readingList milight/LWT:.* {json2nameValue($EVENT) }</code><br />
Die über ''attrTemplate'' verfügbaren Konfigurationen verwenden in der Regel keine ClientID's bzw. entfernen diese.<br />
<br />
=== Wildcards in readingList und setList ===<br />
Auch in readingList und in setList sollten sich sog. wildcards verwenden lassen. Die Vorgehensweise ist jedoch unterschiedlich:<br />
<br />
In ''readingList'' werden normale regex-Ausdrücke verwendet. Ein Punkt steht daher z.B. für ein beliebiges Zeichen, alles zwischen zwei Topic-Tree-Elementen (getrennt typischerweise durch einen "/") kann man so schreiben: "[^/]+" (entspricht: "Mindestens ein Zeichen, das kein Schrägstrich ist"). Ergänzender Hinweis: Will man z.B. Informationen aus einem beliebigen Teil des Topic-trees extrahieren und als Reading-Namen verwenden, kann dies im Rahmen eines Perl-Aufrufs geschehen. Beispiele aus der mqtt2.template-file: OpenMQTTGateway_BT_scanner und OpenMQTTGateway_BT_gtag (letzteres überführt die Information, über welches Gateway bestimmte Informationen eingegangen ist jeweils in eigene Readings pro Gateway).<br />
<br />
In ''setList'' gelten dagegen die wildcard-Konventionen aus der MQTT-Welt. Dort steht "+" für einen austauschbaren Teil des Topic-Trees (zwischen zwei Schrägstrichen). Anmerkung: Bitte vorher prüfen, ob es wirklich sinnvoll ist, derart unspezifische Publishes vorzunehmen. Meist gibt es "Gruppen-Topics", auf die mehrere Geräte eines bestimmten Typs hören bzw. man kann dies dort (in der firmware bzw. auf den Konfigurationsseiten der Geräte) einstellen.<br />
<br />
=== Die JSON-Daten sollen ausnahmsweise nicht ausgepackt werden ===<br />
In manchen Fällen ist das automatische Auspacken der JSON-Payload nicht erwünscht. In diesen Fällen kann man einfach den gewünschten Reading-Namen in die readingList eintragen, statt der Anweisung, den JSON an json2NameValue() zu übergeben. Aus<br />
<pre><br />
attr MQTT_OwnTracks readingList owntracks/clouduser/mi6:.* { json2nameValue($EVENT) }\<br />
owntracks/clouduser/mi6/waypoints:.* { json2nameValue($EVENT) }\<br />
owntracks/clouduser/mi6/event:.* { json2nameValue($EVENT) }<br />
</pre><br />
wird dann:<br />
<pre><br />
attr MQTT_OwnTracks readingList owntracks/clouduser/mi6:.* json_mi6\<br />
owntracks/clouduser/mi6/waypoints:.* json_waypoints\<br />
owntracks/clouduser/mi6/event:.* json_event<br />
</pre><br />
Erforderlichenfalls kann man die Einträge auch doppelt erstellen, um sowohl den JSON wie auch die ausgepackten Readings zu erhalten.<br />
<br />
=== Die JSON-Daten vor dem auspacken manipulieren ===<br />
Aus diversen Gründen kann es zweckmäßig sein, einen bestimmten Wert der JSON-Payload zu ignorieren.<br />
Z.B. sendet ein Client statt eines Messwertes die Info "bad". Dieser Fehlerwert soll aus der JSON-Payload "ausgefiltert" werden:<br />
<pre><br />
attr DEVICE readingList <your topic>:.* { my $rets = json2nameValue($EVENT,'',$JSONMAP);; my %cleaned = map { $_,$rets->{$_} } grep { 'bad' ne $rets->{$_} } keys %{$rets};; return \%cleaned }<br />
</pre><br />
<br />
Oder auch einen Wert umzubenennen wenn die JSON-Payload nur ein Objekt beinhaltet:<br />
<pre><br />
attr DEVICE readingList <your topic>:.* {my %h=(0=>'SofortLaden',1=>'MinPV',2=>'NurPV',3=>'Stop',4=>'Standby');; return {ChargeMode=>$h{$EVENT}}}<br />
</pre><br />
<br />
=== Unnötige Konfigurationsinformationen verwerfen ===<br />
Siehe Einleitung und den [[MQTT2_CLIENT#ignoreRegexp|ignoreRegexp-Abschnitt zu MQTT2_CLIENT]].<br />
<br />
=== Weiterführende Themen ===<br />
==== Verbinden mehrerer FHEM-Instanzen über MQTT ====<br />
Wie im Hauptartikel zu [[MQTT#Kommunikation zu sonstigen FHEM-Geräten über MQTT|MQTT]] erläutert, gibt es mehrere Varianten, wie man mit Hilfe von FHEM aus Events an beliebigen Geräten MQTT-Messages erzeugen kann. So kann man z.B. Messdaten eines Systems über ein ''notify'' iVm. einer einfachen ''publish''-Anweisung an ein zweites FHEM schicken, das diese Daten dann z.B. mit Hilfe der MQTT2-Module auswerten kann.<br />
Damit dabei Nachrichten unterschiedlicher Quellen auch als getrennte Readings bzw. ggf. auch gesonderten MQTT2_DEVICE-Instanzen zugeordnet werden, sollte man entsprechende Topic-Strukturen wählen, die dann auch mit Hilfe einer geeigneten ''bridgeRegexp'' automatisiert ausgewertet werden kann, siehe z.B. dieser {{Link2Forum|Topic=107145|LinkText=Forumsthread}}:<br />
attr MQTT2_myMqttServer bridgeRegexp \<br />
SmartHome/MqttGenericBridge2/([A-Za-z0-9]*)/.*:.* "mgb2_$1"<br />
Dabei werden die betreffenden Informationen der entfernten FHEM-Instanz alle nach dem Schema ''SmartHome/MqttGenericBridge2/<Device-Name>/<Reading-Name>'' versendet.<br />
<br />
==== Umstellung von MQTT_DEVICE (und Derivaten wie XiaomiMQTTDevice) zu MQTT2_DEVICE ====<br />
Wer beabsichtigt, von der Implementierung MQTT+MQTT_DEVICE zu MQTT2-IO und MQTT2_DEVICE zu wechseln, sollte einige Punkte beachten. Viele diesbezügliche Fragen sind vor allem in {{Link2Forum|Topic=103762|LinkText=diesem Foren-Thread}}<br />
<br />
näher erläutert.<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=91394|LinkText=Thread, aus dem diese Anleitung ursprünglich entstanden ist}}<br />
* {{Link2Forum|Topic=91807|LinkText=Thread zum Tasmota-Device}}<br />
* {{Link2Forum|Topic=97989|LinkText=Thread, aus dem diese Anleitung für den eBus ursprünglich entstanden ist}}<br />
* {{Link2Forum|Topic=94495|LinkText=Neue templates einreichen}}<br />
* {{Link2Forum|Topic=94494|LinkText=Fragen, Wünsche und Kritik zu mqtt2.template}}<br />
* {{Link2Forum|Topic=116162|LinkText=Der MQTT-Workshop für MQTT2-Module}}<br />
<br />
== Hinweise ==<br />
<references /><br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:MQTT]]<br />
[[Kategorie:IP Components|IP Komponenten]]<br />
[[Kategorie:Other Components]]<br />
[[Kategorie:Interfaces]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=HM-Sen-RD-O_Funk-Regensensor&diff=35497HM-Sen-RD-O Funk-Regensensor2021-04-13T08:35:33Z<p>No Legend: /* Steuerung / Betrieb */ Anpassung DOIF mit Abfrage des Heizungstatus um Überlast der Sender zu vermeiden</p>
<hr />
<div>== Allgemeines ==<br />
Der HM-Sen-RD-O (RD-O) ist ein Funk-Regensensor. Stand 26.06.2013 war er noch nicht lieferbar, ab August 2013 waren die Fertiggeräte verfügbar und seit Dezember 2013 sind auch die Bausätze lieferbar.<br />
<br />
Er erkennt beginnenden Regen und kann über mit ihm [[Peering (HomeMatic)|gepeerte]] Aktoren Reaktionen veranlassen. Zudem verfügt er über eine eingebaute Heizung sowie eine optische Anzeige (grüne LED) direkt im Gehäuse, die durch Aufleuchten die Regenerkennung darstellt. Er wird mittels einer externen Spannungsversorgung (DC 7,5 bis 30&nbsp;V; nicht im Lieferumfang) betrieben.<br />
<br />
Die eingebaute Heizung in der Sensorfläche soll Fehlmeldungen (Betauung, z.B. durch Nebel, bzw. Vereisung) vermeiden helfen.<br />
<br />
== Technische Daten ==<br />
* Aktuelle Firmware: 1.4 (Stand Dezember 2013)<br />
* Versorgungsspannung: 7,5–30 V DC<br />
* Max. Stromaufnahme: 250 mA<br />
* IP-Schutzart: IP44<br />
* Leistungsaufnahme Ruhebetrieb: 0,4 W (ohne Sensorheizung)<br />
* Leistungsaufnahme Sensorheizung: ca. 1 W<br />
* Abmessungen (B x H x T): 80 x 82 x 55 mm<br />
* Gewicht: 286 gr.<br />
<br />
Man kann den RD-O auch als Bausatz bestellen, dann ist er ein paar Euro preiswerter. Der Zusammenbau erfordert keine Profi-Lötkenntnisse, da nur ein paar bedrahtete Bauteile (Elko, LEDs, Transceiver-Modul usw.) einzulöten sind. Der Sensor ist bereits verklebt und angeschlossen.<br />
<br />
== Betrieb mit FHEM ==<br />
Mit Stand Dezember 2013 wird der RD-O von FHEM unterstützt (Ausnahme siehe "Probleme"). Voraussetzung ist ein halbwegs aktueller FHEM-Versionsstand, da es sich um ein relativ neues HomeMatic-Gerät handelt. Zunächst ist der RD-O mit FHEM zu p'''ai'''ren. Nun kann man das Device [[rename|umbenennen]]. Die Kanäle (siehe unten) werden dabei (leider) nicht automatisch mit umbenannt, dies kann aber durch entsprechende ''rename''-Befehle von Hand nachgeholt werden (ggf. vorher prüfen, ob das Gerät ein ''set ... deviceRename ...'' anbietet; damit würden auch die Kanäle umbenannt). Danach ein ''save config'' und ''rereadcfg'' und weiter ...<br />
<br />
=== Geräte-Kanäle (Device-channels) ===<br />
Der RD-O hat 2 Kanäle zusätzlich zum "Channel 00", der das eigentliche Device darstellt.<br />
* Channel 01, dieser enthält alles für die eigentliche Erkennung, ob es gerade regnet oder nicht<br />
* Channel 02, über diesen kann das Verhalten der internen Heizung gesteuert werden<br />
<br />
==== Channel 00 ====<br />
Die Register:<br />
list: register | range | peer | description<br />
0: localResDis | literal | | local reset disable options:on,off<br />
0: pairCentral | 0 to 16777215 | | pairing to central<br />
0: transmDevTryMax | 1 to 10 | | max message re-transmit<br />
<br />
==== Channel 01 ====<br />
<br />
Die Register:<br />
list: register | range | peer | description<br />
1: cndTxThrhHi | 0 to 3000mV | | threshold high condition<br />
1: cndTxThrhLo | 0 to 3000mV | | threshold high condition<br />
1: eventFilterTimeB | 5 to 7620s | | event filter time<br />
1: evntRelFltTime | 1 to 7620s | | event filter release time <br />
1: highHoldTime | 60 to 7620s | | hold time on high state<br />
1: sign | literal | | signature (AES) options:off,on<br />
1: transmitTryMax | 1 to 10 | | max message re-transmit<br />
4: expectAES | literal | required | expect AES options:off,on<br />
4: peerNeedsBurst | literal | required | peer expects burst options:on,off<br />
<br />
==== Channel 02 ====<br />
Die Register:<br />
list: register | range | peer | description<br />
1: sign | literal | | signature (AES) options:off,on<br />
<br />
=== Konfiguration ===<br />
Bei eingeschaltetem [[autocreate]] werden die erforderlichen Definitionen zum erkannten Sen-RD-O überwiegend selbstständig angelernt:<br />
<br />
define Regensensor CUL_HM 20CE4B<br />
attr Regensensor .devInfo 040101<br />
attr Regensensor .stc 70<br />
attr Regensensor autoReadReg 4_reqStatus<br />
attr Regensensor firmware 1.4<br />
attr Regensensor model HM-Sen-RD-O<br />
attr Regensensor room CUL_HM<br />
attr Regensensor serialNr KEQ0117756<br />
attr Regensensor subType sensRain<br />
attr Regensensor webCmd getConfig<br />
define FileLog_Regensensor FileLog /opt/fhem/log/Regensensor-%Y-%m.log Regensensor<br />
attr FileLog_Regensensor logtype text<br />
attr FileLog_Regensensor room CUL_HM<br />
<br />
# Channel 01 => 20CE4B01 <br />
define Regensensor_EsRegnet CUL_HM 20CE4B01<br />
attr Regensensor_EsRegnet expert 1<br />
attr Regensensor_EsRegnet model HM-Sen-RD-O<br />
attr Regensensor_EsRegnet peerIDs 00000000,<br />
attr Regensensor_EsRegnet room CUL_HM<br />
define FileLog_Regensensor_EsRegnet FileLog /opt/fhem/log/Regensensor_EsRegnet-%Y-%m.log Regensensor_EsRegnet<br />
attr FileLog_Regensensor_EsRegnet logtype text<br />
attr FileLog_Regensensor_EsRegnet room CUL_HM<br />
define SVG_FileLog_Regensensor_EsRegnet SVG FileLog_Regensensor_EsRegnet:Regensensor:CURRENT<br />
attr SVG_FileLog_Regensensor_EsRegnet room CUL_HM<br />
<br />
# Channel 02 => 20CE4B02<br />
define Regensensor_Heizung CUL_HM 20CE4B02<br />
attr Regensensor_Heizung expert 1<br />
attr Regensensor_Heizung model HM-Sen-RD-O<br />
attr Regensensor_Heizung peerIDs 00000000,<br />
attr Regensensor_Heizung room CUL_HM<br />
define FileLog_Regensensor_Heizung FileLog /opt/fhem/log/Regensensor_Heizung-%Y-%m.log Regensensor_Heizung<br />
attr FileLog_Regensensor_Heizung logtype text<br />
attr FileLog_Regensensor_Heizung room CUL_HM<br />
<br />
=== Steuerung / Betrieb ===<br />
Über die Veränderung der entsprechenden Register kann man das Verhalten des RD-O anpassen. So läuft z.B. ab Werk die Heizung nach Anschluss der Spannungsversorgung ständig mit. Nach der Verbindung mit einer Zentrale (hier FHEM) kann man dies steuern. <br />
<br />
Eine manuelle Heizungssteuerung erreicht man über den ''Channel 02'':<br />
Mit dem Befehl <br />
:<code> set Regensensor_Heizung off</code><br />
wird die Heizung aus- und durch<br />
:<code> set Regensensor_Heizung on</code><br />
wieder eingeschaltet. <br />
<br />
Eine einfache Heizungsautomatik ist ganz einfach über ein Attribut möglich:<br />
:<code> attr Regensensor_Heizung param offAtPon,onAtRain</code><br />
<code>offAtPon</code> schaltet die Heizung zwingend aus, wenn der (wieder) Sensor mit Spannung versorgt wird (nach einem Stromausfall). <br />
<code>onAtRain</code> schaltet die Heizung beim Status ''rain'' ein und beim Status ''dry'' wieder aus.<br />
<br />
Evtl. sollte man die Heizung in Abhängigkeit von Temperatur und/oder relativer Luftfeuchte ein- bzw. ausschalten (Stromverbrauch; Materialschonung, denn die Sensorfläche wird merklich warm). Ein Einschalten bei erkanntem Regen (wenn nicht bereits durch das o.g. Attribut realisiert) ist ebenfalls sinnvoll, denn die Heizung sorgt für ein schnelleres Abtrocknen der Sensorfläche und somit eine zeitnahe Regenende-Erkennung.<br />
<br />
Hierzu kann beispielsweise folgendes in FHEM definiert werden:<br />
<br />
:<code> define DoIf_RegenSensorHzgOnOff DOIF (([Aussen.ThermoHygro:temperature]<5 or [Regensensor_EsRegnet] eq "rain") and [Regensensor_Heizung] eq "off") (set Regensensor_Heizung on) DOELSEIF (([Aussen.ThermoHygro:temperature]>6 and [Regensensor_EsRegnet] eq "dry") and [Regensensor_Heizung] eq "on") (set Regensensor_Heizung off)</code><br />
:<code> attr DoIf_RegenSensorHzgOnOff room Wetter</code><br />
<br />
Die Sensor-Heizung wird damit bei Temperaturen unter 5 °C '''oder''' bei erkanntem Regen eingeschaltet. Die Abschaltung der Heizung erfolgt, sobald die Temperatur über 6 °C beträgt '''und''' es trocken ist.<br />
<br />
Mann sollte darauf achten, dass der Status der Heizung, im DOIF mit abgefragt wird. Ohne diese Abfrage werden sehr oft die Schaltbefehle gesendet, was dauerhaft dazu führen kann, dass die Sender in den Überlastmodus gehen und kurzzeitig keine Befehle mehr senden.<br />
<br />
<br />
Der RD-O reagiert bereits bei der Berührung der Sensorfläche mit einem Finger mit der Meldung "Es regnet". Dies erfolgt auch, sobald man einen kleinen Bereich mit einem Tropfen Wasser befeuchtet. Die Meldung bleibt (ab Werk) einige Minuten erhalten. Das Ansprech- und Rücksetzverhalten kann über die Veränderung der entsprechenden Register angepasst werden.<br />
<br />
=== Log-Daten ===<br />
Auszüge aus den Logs unmittelbar nach Anschluss der Spannungsversorgung und dem ersten Drücken der Anlerntaste am RD-O:<br />
<br />
==== Event monitor ====<br />
<Datum> <Zeit> Global global UNDEFINED CUL_HM_HM_Sen_RD_O_20EC4B CUL_HM 20EC4B A1A02840020EC4B0000001400A74B45513031313730363770040101<br />
<Datum> <Zeit> Global global DEFINED CUL_HM_HM_Sen_RD_O_20EC4B<br />
<Datum> <Zeit> Global global DEFINED FileLog_CUL_HM_HM_Sen_RD_O_20EC4B<br />
<Datum> <Zeit> Global global SAVE<br />
<Datum> <Zeit> Global global UNDEFINED CUL_HM_HM_Sen_RD_O_20EC4B_Rain CUL_HM 20EC4B01<br />
<Datum> <Zeit> Global global DEFINED CUL_HM_HM_Sen_RD_O_20EC4B_Rain<br />
<Datum> <Zeit> Global global DEFINED FileLog_CUL_HM_HM_Sen_RD_O_20EC4B_Rain<br />
<Datum> <Zeit> Global global SAVE<br />
<Datum> <Zeit> Global global UNDEFINED CUL_HM_HM_Sen_RD_O_20EC4B_Heating CUL_HM 20EC4B02<br />
<Datum> <Zeit> Global global DEFINED CUL_HM_HM_Sen_RD_O_20EC4B_Heating<br />
<Datum> <Zeit> Global global DEFINED FileLog_CUL_HM_HM_Sen_RD_O_20EC4B_Heating<br />
<Datum> <Zeit> Global global SAVE<br />
... und kurz darauf ...<br />
<Datum> <Zeit> CUL_HM CUL_HM_HM_Sen_RD_O_20EC4B_Rain timedOn: off<br />
<Datum> <Zeit> CUL_HM CUL_HM_HM_Sen_RD_O_20EC4B_Rain dry<br />
<br />
==== FHEM-Log ====<br />
<Datum> <Zeit> 3: CUL_HM Unknown device CUL_HM_HM_Sen_RD_O_20EC4B, please define it<br />
<Datum> <Zeit> 2: autocreate: define CUL_HM_HM_Sen_RD_O_20EC4B CUL_HM 20EC4B A1A02840020EC4B0000001400A74B45513031313730363770040101<br />
<Datum> <Zeit> 2: autocreate: define FileLog_CUL_HM_HM_Sen_RD_O_20EC4B FileLog /opt/fhem/log/CUL_HM_HM_Sen_RD_O_20EC4B-%Y-%m.log CUL_HM_HM_Sen_RD_O_20EC4B<br />
<Datum> <Zeit> 2: autocreate: define CUL_HM_HM_Sen_RD_O_20EC4B_Rain CUL_HM 20EC4B01<br />
<Datum> <Zeit> 2: autocreate: define FileLog_CUL_HM_HM_Sen_RD_O_20EC4B_Rain FileLog /opt/fhem/log/CUL_HM_HM_Sen_RD_O_20EC4B_Rain-%Y-%m.log CUL_HM_HM_Sen_RD_O_20EC4B_Rain<br />
<Datum> <Zeit> 2: autocreate: define CUL_HM_HM_Sen_RD_O_20EC4B_Heating CUL_HM 20EC4B02<br />
<Datum> <Zeit> 2: autocreate: define FileLog_CUL_HM_HM_Sen_RD_O_20EC4B_Heating FileLog /opt/fhem/log/CUL_HM_HM_Sen_RD_O_20EC4B_Heating-%Y-%m.log CUL_HM_HM_Sen_RD_O_20EC4B_Heating<br />
<Datum> <Zeit> 2: CUL_HM set CUL_HM_HM_Sen_RD_O_20EC4B getConfig<br />
<br />
==== Device-Logs ====<br />
==== Channel 01 Log (Es regnet) ====<br />
<Datum> <Zeit> Regensensor_EsRegnet timedOn: off<br />
<Datum> <Zeit> Regensensor_EsRegnet dry<br />
<Datum> <Zeit> Regensensor_EsRegnet timedOn: off<br />
<Datum> <Zeit> Regensensor_EsRegnet rain<br />
<Datum> <Zeit> Regensensor_EsRegnet timedOn: off<br />
<Datum> <Zeit> Regensensor_EsRegnet dry<br />
<Datum> <Zeit> Regensensor_EsRegnet timedOn: off<br />
<Datum> <Zeit> Regensensor_EsRegnet rain<br />
<Datum> <Zeit> Regensensor_EsRegnet timedOn: off<br />
<Datum> <Zeit> Regensensor_EsRegnet dry<br />
<br />
Am gezeigten log ist zu erkennen, dass der Sen-RD-O Zustandsänderungen genau einmal meldet und danach nicht wiederholt.<br />
<br />
==== Channel 02 Log (Heizung an oder aus) ====<br />
<Datum> <Zeit> Regensensor_Heizung timedOn: off<br />
<Datum> <Zeit> Regensensor_Heizung on<br />
<Datum> <Zeit> Regensensor_Heizung set_off<br />
<Datum> <Zeit> Regensensor_Heizung timedOn: off<br />
<Datum> <Zeit> Regensensor_Heizung off<br />
<Datum> <Zeit> Regensensor_Heizung set_on<br />
<Datum> <Zeit> Regensensor_Heizung timedOn: off<br />
<Datum> <Zeit> Regensensor_Heizung on<br />
<br />
=== Plot / Grafische Darstellung ===<br />
Der RD-O meldet im Channel_01-Log die Zustände "rain" (für: es regnet) und "dry" (für: es regnet nicht). Diese Werte kann man in FHEM-Plots natürlich nicht so auswerten wie numerische Angaben. Aber auch dafür bietet FHEM eine Lösung. Hier zunächst der Plot:<br />
<br />
[[Datei:HM-Sen-RD-O_cut.jpg|Plot des HM-Sen-RD-O]]<br />
<br />
Und hier die dazugehörige Plot-Datei:<br />
set terminal png transparent size <SIZE> crop<br />
set output '<OUT>.png'<br />
set xdata time<br />
set timefmt "%Y-%m-%d_%H:%M:%S"<br />
set xlabel " "<br />
set title 'Regnet es: Ja/Nein'<br />
set ytics ("Trocken" 0, "Regen" 1)<br />
set y2tics ("Trocken" 0, "Regen" 1)<br />
set grid<br />
set ylabel ""<br />
set y2label ""<br />
set yrange [-0.1:1.1]<br />
set y2range [-0.1:1.1]<br />
<br />
#FileLog 3::0:$fld[2]=~"rain"?1:0<br />
<br />
plot "<IN>" using 1:2 axes x1y2 title 'Regnet es?' ls l0 lw 1 with steps<br />
<br />
Dieser Plot hat noch einen Mangel. Um kurz vor 20:00 Uhr hat es erneut angefangen zu regnen und obwohl es jetzt nach 22:00 Uhr ist, deutet der Plot an, dass es momentan "nicht regnet". An einer plausibleren Darstellung wird gearbeitet.<br />
<br />
== Bekannte Probleme ==<br />
=== getConfig ===<br />
Anfangs (Mitte Dezember 2013) gab es noch ein Problem mit dem ''getConfig''. Dieser Befehl wurde quittiert mit den Meldungen:<br />
<br />
protState CMDs_done_Errors:1<br />
...<br />
state RESPONSE TIMEOUT:RegisterRead<br />
<br />
Andere Befehle (wie oben z.B. Heizung an/aus) wurden dagegen umgehend erfolgreich abgearbeitet.<br />
<br />
Dieses Problem ist mittlerweile gelöst, so dass der RD-O voll genutzt werden kann.<br />
<br />
=== Erst Minuten nach Regenende meldet der RD-O "dry" (also kein Regen mehr) ===<br />
Das liegt zum einen daran, dass der auf der Sensorfläche befindliche Niederschlag erst einmal durch die interne Sensorheizung "verdampft" werden muss. Zum anderen ist der RD-O so eingestellt, dass er erst 5 Minuten nach Abtrocknen der Sensorfläche wieder den Zustand "dry" an FHEM meldet. Zuständig dafür ist das RD-O-Register ''highHoldTime'' im Channel '''01''', das werksseitig auf 300 Sekunden (also 5 Minuten) eingestellt ist. Dieses Register kann man aber auf einen Wert von (minimal, kürzer geht nicht) z.B. 60 Sekunden setzen: <br />
:<code> set Regensensor_EsRegnet regSet highHoldTime 60</code><br />
<br />
=== Korrosion / eindringendes Wasser ===<br />
In den Käuferbewertungen und im Kundenforum von ELV gibt es Meldungen, dass möglicherweise die Sensorfläche "korrodiert" bzw. der RD-O mit Wasser "voll läuft". Diese Meldungen scheinen sich allerdings auf eine frühere Version des ARR-bausatzes zu beziehen, bei der man die Sensorfläche noch selbst in den Gehäusedeckel (wasserdicht) einkleben musste. Dieses Einkleben war bei dem Bausatz von Mitte Dezember 2013 nicht mehr erforderlich. Sobald dazu Erfahrungswerte vorliegen, werden diese hier eingetragen.<br />
<br />
== Links ==<br />
* [http://www.elv.de/homematic-funk-regensensor-1.html Produktinfo]<br />
* Bedienungsanleitung (PDF) {{DocLink|elv|/Assets/Produkte/13/1302/130220/Downloads/130220_hm_regensensor_um.pdf}}<br />
* Datenblatt (PDF) {{DocLink|elv|/Assets/Produkte/13/1302/130220/Downloads/130220_hm_regensensor_data.pdf}}<br />
<br />
[[Kategorie:HomeMatic Components]]<br />
[[Kategorie:Regensensor]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=FTUI_Widget_Weatherdetail&diff=30500FTUI Widget Weatherdetail2019-05-25T08:04:41Z<p>No Legend: Link zu Forum Thread hinzu</p>
<hr />
<div>{{Baustelle}}<br />
<br />
<br />
'''ACHTUNG: gebt mir ein paar tage um die seite zu erstellen. habe die übliche ausrede: real life job'''<br />
==Attribute==<br />
{|class="wikitable"<br />
!Attribut<br />
!Beschreibung<br />
!Standard-Wert<br />
!Beispiel<br />
|-<br />
|'''data-device'''||FHEM-Device, welches die Wetterdaten bereitstellt (zzt. '''NUR''' proplanta)||||data-device="Proplanta"<br />
|-<br />
|'''data-detail'''||Alle Details welche für den aktuellen Tag angezeigt werden sollen||||data-detail='["clock", "chOfRain","rain","temp","weather","wind","windDir","icons"]'<br />
<br />
|}<br />
<br />
https://forum.fhem.de/index.php?topic=89884.0<br />
<br />
[[Kategorie:FHEM_Tablet_UI|Wetter]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&diff=30499FHEM Tablet UI2019-05-25T08:03:36Z<p>No Legend: /* 3rd Party Widgets */ Weatherdetail hinzugefügt</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Oberfläche für FHEM<br />
|ModType=x<br />
|ModFTopic=34233<br />
|ModForumArea=TabletUI<br />
|ModTechName=n.a.<br />
|ModOwner=setstate ({{Link2FU|7023|Forum}})<br />
}}<br />
[[FHEM Tablet UI]] (FTUI) ist ein leichtgewichtiges aber funktionsreiches Frontend-Framework zum Steuern und Überwachen von in FHEM integrierten Geräten. Es basiert auf HTML/CSS/JavaScript und stellt somit keine zusätzlichen Anforderungen an den FHEM-Server.<br />
<br />
Mit Hilfe zahlreicher Widgets, die sehr leicht mit HTML Code konfiguriert werden können, ist es möglich, innerhalb kurzer Zeit ein den eigenen Wünschen entsprechendes User-Interface aufzubauen.<br />
<br />
Für den Betrieb ist nur eine FHEM-Installation mit [[HTTPSRV|HTTPSRV-Modul]] sowie ein gängiger Webbrowser notwendig.<br />
<br />
Mit wenigen Anpassungen ist es auch möglich, das UI auf anderen Webservern (Apache, u.a.) zu betreiben. Somit können FHEM und FHEM Tablet UI auch auf getrennten Systemen ausgeführt werden.<br />
<br />
[[File:tablet_ui.png|thumb|500px|center|Beispiel für ein mit [[FHEM Tablet UI]] erstelltes User-Interface]]<br />
<br />
{{Todo|Design-Möglichkeiten erklären, Navigationsmethoden ausformulieren}} <br />
<br />
== Installation ==<br />
Die Installation von FHEM Tablet UI erzeugt keinen großen Aufwand und besteht im Großen und Ganzen aus drei Schritten:<br />
*Dateien aus dem GitHub-Repository herunterladen<br />
*FHEM konfigurieren ([[HTTPSRV]]-Device erstellen, [[FHEMWEB]]-Attribut longpoll einstellen)<br />
*Eine Beispieldatei anlegen<br />
<br />
<br />
{{Hinweis|Diese Anleitung geht davon aus, dass FHEM unter Debian nach der Anleitung [https://debian.fhem.de Stable build using apt] installiert wurde.<br />
Ist dies nicht der Fall, muss der Pfad '''/opt/fhem''' dementsprechend angepasst werden.}}<br />
<br />
<br />
'''1.''' Zuerst müssen alle Dateien von FHEM Tablet UI in das FHEM-Verzeichnis '''/opt/fhem/www''' kopiert werden. Das geht mit folgendem '''update'''-Befehl über die FHEM-Befehlszeile.<br />
:<code>update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</code><br />
<br />
:[[Datei:FTUI_Installation_01.png|thumb|none|Schritt 1: Dateien kopieren]]<br />
<br />
<br />
'''2.''' Anschließend ist ein neues [[HTTPSRV]]-Device in FHEM anzulegen, welches auf den Ordner mit den gerade heruntergeladenen Dateien verweist.<br />
:<code>define TABLETUI HTTPSRV ftui/ ./www/tablet/ Tablet-UI</code><br />
<br />
:[[Datei:FTUI_Installation_02.png|thumb|none|Schritt 2: HTTPSRV-Device anlegen]]<br />
<br />
{{Hinweis|Dieser Schritt kann ausgelassen werden, wenn die Funktionalitäten von [[FHEMWEB]] ausreichend sind. Dann muss FTUI aber in weiterer Folge unter der URL '''<nowiki>http(s)://<fhem-server>:8083/fhem/tablet/index.html</nowiki>''' aufgerufen werden und es wird kein Link auf FTUI in der FHEM GUI erstellt. Vorteil ist aber, dass das FHEMWEB-Caching verwendet werden kann. Siehe dieser {{Link2Forum|Topic=86362|Message=788258}}.}}<br />
<br />
'''3.''' Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die '''longpoll'''-Einstellung im [[FHEMWEB]] Device festzulegen.<br />
<br />
:<code>attr WEB longpoll websocket</code><br />
:bzw. bei Problemen mit ''websocket''<br />
:<code>attr WEB longpoll 1</code><br />
<br />
:[[Datei:FTUI_Installation_03.png|thumb|none|Schritt 3: longpoll einstellen]]<br />
<br />
<br />
'''4.''' Weil FTUI noch nichts anzuzeigen hat, wird die Datei '''/opt/fhem/www/tablet/index-example.html''' nach '''/opt/fhem/www/tablet/index.html''' kopiert.<br />
:<code>sudo cp -a /opt/fhem/www/tablet/index-example.html /opt/fhem/www/tablet/index.html</code><br />
<br />
:[[Datei:FTUI_Installation_04.png|thumb|none|Schritt 4: index.html erstellen]]<br />
<br />
<br />
'''5.''' Abschließend muss FHEM noch '''neu gestartet''' werden (''shutdown restart'') da das Attribut '''longpoll''' geändert wurde.<br />
<br />
<br />
Somit ist FHEM Tablet UI bereit zur Verwendung und kann durch Aufruf der URL '''<nowiki>http://<fhem-server>:8083/fhem/ftui/</nowiki>''' oder den Link im FHEM-Menü geöffnet werden<br />
<br />
== Update ==<br />
Ein Update von FTUI kann ebenfalls über die FHEM-Kommandozeile erfolgen.<br />
<br />
'''1.''' Prüfen der Änderungen seit dem letzten Download/Update durch Eingabe von:<br />
:<code><nowiki>update check https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
<br />
'''2.''' Update der geänderten Dateien durch Eingabe von:<br />
:<code><nowiki>update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
<br />
Eine weitere Option ist das Hinzufügen des FTUI-Git-Repositories zum allgemeinem Update-Vorgang von FHEM. Dabei wird dann bei einem FHEM-Update auch gleich FHEM Tablet UI aktualisiert, bzw. die Änderungen angezeigt.<br />
:<code><nowiki>update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
Beachte: Das Ergebnis des o.g. Befehls wird in FHEM/controls.txt eingetragen, siehe auch [[Update#update_add]]<br />
<br />
== Konfiguration ==<br />
===DOCTYPE===<br />
In allen HTML-Dateien, die im Browser geladen werden und das typische HTML-Gerüst besitzen (also alle Hauptseiten, jedoch keine Template-Dateien), sollte eine ''Document Type Declaration'' (DTDT) eingefügt werden. Mit ihr wird festgelegt, welche ''Document Type Definition'' hier verwendet wird (das kommt aus der Metasprache XML), konkret also, in welcher Version der nachfolgende HTML-Code vom Browser interpretiert werden soll. Lässt man die DTDT weg, oder definiert sie auf verschiedenen Seiten unterschiedlich, kann ein und der selbe HTML-Code zu unterschiedlichen Darstellungen führen. Die DTDT erfolgt immer auf der ersten Zeile, noch vor dem <code><html></code>-Tag. Nachfolgend wird HTML5 verwendet.<br />
<br />
<syntaxhighlight lang="html"><br />
<!DOCTYPE html><br />
<html><br />
<head>...</head><br />
<body>...</body><br />
</html><br />
</syntaxhighlight><br />
<br />
===META-Parameter===<br />
Das Tablet UI lässt sich über die META-Parameter konfigurieren. Diese Parameter sind in jeder '''.html''' Datei (z.B. index.html) im Abschnitt '''<head>''' einzutragen. Ausgenommen davon sind Dateien, die als Template, Pagebutton-Zielseiten oder ähnliches eingebunden werden.<br />
<br />
Die Parameter sind immer nach diesem Schema aufgebaut:<br />
<meta name="[Parameter-Name]" content="[Parameter-Wert]"><br />
<br />
===Verbindung zu FHEM===<br />
{| class="wikitable"<br />
|-<br />
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung<br />
|-<br />
|web_device||WEB||String||FHEM-Device, welches für das Polling verwendet wird<br />
|-<br />
|longpoll||1||0, 1||<br />
'''0''': Longpoll deaktiviert; alle 30s ein Shortpoll (Neuladen der gesamten Statusänderungen)<br />
<br />
'''1''': Longpoll aktiv; geänderte Stati werden sofort aktualisiert, zusätzlich werden alle 15min die gesamten Statusänderungen geladen.<br />
|-<br />
|longpoll_type||websocket||websocket, ajax, 0||<br />
'''websocket''': Für die Aktualisierung der Daten wird das Websocket-Protokoll verwendet. Werden vom Browser keine Websockets unterstützt, gibt es einen automatischen Fallback auf Ajax.<br />
<br />
'''ajax''': Ajax wird für die Aktualisierung verwendet.<br />
<br />
'''0''': Longpoll deaktiviert, Shortpoll wird verwendet.<br />
|-<br />
|longpoll_filter||.*||RegEx||Event-Filter. Kann verwendet werden, wenn z.B. Devices, die in FTUI angezeigt werden, in einem eigenen FHEM-Room sind.<br />
|-<br />
|longpoll_maxage||240||Integer||Kommen in diesem Zeitraum (Sekunden) keine Longpoll-Events bei FTUI an, wird die Verbindung als "disconnected" angesehen und ein neuer Verbindungsversuch wird gestartet.<br />
|-<br />
|shortpoll_interval||900||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet<br />
|-<br />
|shortpoll_only_interval||30||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet, sollte Longpoll deaktiviert sein<br />
|-<br />
|fhemweb_url||/fhem/||Integer||URL zu FHEM. Wird benötigt wenn FTUI auf einem anderen als dem FHEM Server läuft oder nicht im Standard-Pfad installiert ist. <br />
Hinweis: Wenn FHEM auf einem anderem Server/Domain läuft muss man das "CORS" Attribut im FHEMWEB Modul (s.o.) auf 1 setzen, sonst bekommt man Cross Origin Fehler. <br />
|}<br />
<br />
===Funktionalität===<br />
{| class="wikitable"<br />
|-<br />
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung<br />
|-<br />
|debug||0||0 - 5||Log-Level<br />
|-<br />
|toast||5||Integer||Anzahl an gleichzeitig angezeigten Toast-Nachrichten. Um keine anzuzeigen, ist der Wert auf 0 zu setzen.<br />
|-<br />
|toast_position||bottom-left||||Position im Browserfenster, wo die Toast-Nachrichten angezeigt werden.<br />
|-<br />
|lang||de||de||Sprache der Oberfläche (für z.B. Datums-/Zeitfunktionen)<br />
|-<br />
|username||||String||Benutzername für eine Basic-Authentifierung *<br />
|-<br />
|password||||String||Passwort für eine Basic-Authentifizierung *<br />
|}<br />
'''*''' Derzeit wird die Basic-Authentifizierung in Kombination mit WebSockets nicht unterstützt. Die Verwendung von '''longpoll=1''' (ajax) ist daher notwendig.<br />
<br />
===Toast-Nachrichten===<br />
[[Datei:Ftui_toast.png|thumb|Toast-Nachrichten]]<br />
Tablet-UI liefert Informationen darüber, was im Moment gerade passiert. Das geschieht über Toast-Nachrichten, die in der Standardeinstellung unten links im Browser auftauchen.<br />
<br />
Wird beispielsweise ein Gerät eingeschaltet, so erscheint eine kleine Nachricht mit dem abgesetzten Befehl. Auch Fehlermeldungen und Statusinformationen werden angezeigt. Ob überhaupt und was konkret angezeigt wird, richtet sich nach dem eingestellten Debug-Level (siehe oben). Beim Debug-Level 5 werden alle Nachrichten angezeigt, bei 0 keine.<br />
<br />
Die Position der Toast-Nachrichten kann über den Meta-Tag <code>meta name='toast_position'</code> festgelegt werden. Für oben-mittig müsste folgender Code eingefügt werden:<br />
<pre><meta name='toast_position' content='top-center'></pre><br />
<br />
Möglich sind folgende Positionen:<br />
* <code>top-left</code><br />
* <code>top-right</code><br />
* <code>bottom-left</code><br />
* <code>bottom-right</code><br />
* <code>top-center</code><br />
* <code>bottom-center</code><br />
* <code>mid-center</code><br />
<br />
Die maximale Anzahl an Nachrichten, die gleichzeitig angezeigt werden können, lässt sich mit <code>meta name='toast'</code> Sind maximal 2 Nachrichten gewünscht, muss folgender Meta-Tag gesetzt werden:<br />
<pre><meta name='toast' content='2'></pre><br />
<br />
==Navigationsmethoden==<br />
{{Todo|Dieser Abschnitt dient derzeit lediglich als Sammlung von Stichpunkten und muss vollständig überarbeitet werden.}} <br />
<br />
'''Unterschied zwischen Pagetab und Pagebutton:<br />
<br />
'''Pagetab:''' Ganze Seite austauschen -> Menü muss auf jede Seite<br />
[[FTUI_Widget_Pagetab]]<br />
<br />
'''Pagebutton:''' Teil der Seite austauschen -> Menü nur in erster Seite<br />
[[FTUI_Widget_Pagebutton]]<br />
<br />
'''Pagelink:''' damit kann man beliebige Widgets kapseln und vorhandene Pagebutton-Seiten ansteuern <br />
[[FTUI Widget Link]]<br />
<br />
==Gestaltung==<br />
===Layout-Optionen===<br />
* [[FTUI Layout Gridster|Gridster]]<br />
* [[FTUI Layout Flex|Flex]]<br />
* [[FTUI Layout Sheet|Tabelle]]<br />
* [[FTUI Layout Row|Reihen]]<br />
<br />
=== Farben ===<br />
Es besteht die Möglichkeit, die Farbwerte in hexadezimaler Form, als RGB-Wert oder mit dem Farbnamen anzugeben. Zum Beispiel: <br />
<br />
*HEX: #ADD8E6<br />
*RBG: rgb(173, 216, 230)<br />
*Namen: lightblue<br />
<br />
Knallige Farben wie '''<span style="color: #ff0000;">#ff0000</span>''' für Rot oder '''<span style="color: #00ff00;">#00ff00</span>''' für Grün sollten vermieden werden.<br />
Es ist besser unterhalb von #D0 (208) für die Grundfarben zu bleiben.<br />
<br />
Empfohlene Farben sind z.B.:<br />
<br />
*Orange: <span style="color: #aa6900;">#aa6900</span><br />
*Rot: <span style="color: #ad3333;">#ad3333</span><br />
*Grün: <span style="color: #32a054;">#32a054</span><br />
*Blau: <span style="color: #6699FF;">#6699FF</span><br />
*Grau: <span style="color: #8C8C8C;">#8C8C8C</span><br />
<br />
Hilfreich bei der Suche nach den Farbwerten ist zum Beispiel der Color-Picker auf dieser Seite: http://www.colorpicker.com. Für die Suche nach Farben, die einen guten Kontrast bilden, diese Webseite: http://vanisoft.pl/~lopuszanski/public/colors/<br />
<br />
Im Ordner ''css'' der FTUI Installation finden sich einige vorbereitete Farbschemata. Diese können mit einem zusätzlichen Eintrag im <nowiki><head></nowiki>-Bereich der FTUI-Seite(n) aktiviert werden.<br />
<br />
Hier am Beispiel eines blauen Farbschemas:<br />
<syntaxhighlight lang="html"><br />
<html><br />
<head><br />
[...]<br />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-blue-ui.css" /><br />
[...]<br />
</head><br />
</syntaxhighlight><br />
<br />
Diese Schema-Dateien ändern alle Widgets. <br />
<gallery><br />
File:Theme_default.png|default<br />
File:Theme_blue.png|fhem-blue-ui.css<br />
File:Theme_green.png|fhem-green-ui.css<br />
File:Theme_mobile.png|fhem-mobile-ui.css<br />
File:Theme_darkblue.png|fhem-darkblue-ui.css<br />
File:Theme_darkgreen.png|fhem-darkgreen-ui.css<br />
</gallery><br />
<br />
Einzelne Widgets können durch Hinzufügen der jeweiligen [[#CSS-Klassen|CSS-Klasse]] geändert werden.<br />
<br />
===CSS-Styles===<br />
Das Layout und das Aussehen des UI kann durch diverse vorgegebene CSS-Klassen beeinflusst werden. Die verfügbaren Klassen sind im Abschnitt [[#CSS-Klassen|CSS-Klassen]] aufgeführt.<br />
<br />
Soll das Aussehen des UI durch eigene CSS-Klassen oder durch Überschreiben der vorhandenen verändert werden, kann eine eigene CSS-Datei erstellt werden, die dann bei einem eventuellen Update von FTUI nicht überschrieben wird. Diese Datei muss den Dateinamen '''fhem-tablet-ui-user.css''' haben und im Ordner '''/fhem/tablet/css''' abgelegt werden. Sie wird dann beim Aufruf von FTUI automatisch mitgeladen.<br />
<br />
=== CSS-Klassen ===<br />
Nicht alle Widgets unterstützen alle hier angegebenen Klassen. Welche genau unterstützt werden, kann auf der jeweiligen Widget-Seite nachgelesen werden.<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|sheet/row/cell-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|sheet}}{{FTUI Klasse|row}}{{FTUI Klasse|cell}}{{FTUI Klasse|cell-1-x}}{{FTUI Klasse|cell-x}}{{FTUI Klasse|left-align}}{{FTUI Klasse|right-align}}{{FTUI Klasse|bottom-align}}{{FTUI Klasse|top-align}}{{FTUI Klasse|center-align}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|row/col-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|col}}{{FTUI Klasse|col-1-x}}{{FTUI Klasse|col-x}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|hbox/vbox-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|vbox}}{{FTUI Klasse|hbox}}{{FTUI Klasse|card}}{{FTUI Klasse|phone-width}}{{FTUI Klasse|full-height}}{{FTUI Klasse|full-width}}{{FTUI Klasse|grow-0}}{{FTUI Klasse|grow-1}}{{FTUI Klasse|grow-2}}{{FTUI Klasse|grow-x}}{{FTUI Klasse|items-top}}{{FTUI Klasse|items-center}}{{FTUI Klasse|items-bottom}}{{FTUI Klasse|items-space-between}}{{FTUI Klasse|items-space-around}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Generelle Klassen für die Positionierung<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|inline}}{{FTUI Klasse|newline}}{{FTUI Klasse|top-space}}{{FTUI Klasse|top-space-2x}}{{FTUI Klasse|top-space-3x}}{{FTUI Klasse|left-space}}{{FTUI Klasse|left-space-2x}}{{FTUI Klasse|left-space-3x}}{{FTUI Klasse|right-space}}{{FTUI Klasse|right-space-2x}}{{FTUI Klasse|right-space-3x}}{{FTUI Klasse|top-narrow}}{{FTUI Klasse|top-narrow-2x}}{{FTUI Klasse|top-narrow-10}}{{FTUI Klasse|left-narrow}}{{FTUI Klasse|left-narrow-2x}}{{FTUI Klasse|left-narrow-3x}}{{FTUI Klasse|right-narrow}}{{FTUI Klasse|right-narrow-2x}}{{FTUI Klasse|right-narrow-3x}}{{FTUI Klasse|centered}}{{FTUI Klasse|wider}}{{FTUI Klasse|narrow}}{{FTUI Klasse|fullsize}}{{FTUI Klasse|compressed}}{{FTUI Klasse|height-narrow}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|maxw40}}{{FTUI Klasse|doublebox-v}}{{FTUI Klasse|doublebox-h}}{{FTUI Klasse|triplebox-v}}{{FTUI Klasse|right}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Vordergrundfarben<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|red}}{{FTUI Klasse|green}}{{FTUI Klasse|blue}}{{FTUI Klasse|lightblue}}{{FTUI Klasse|orange}}{{FTUI Klasse|gray}}{{FTUI Klasse|lightgray}}{{FTUI Klasse|white}}{{FTUI Klasse|black}}{{FTUI Klasse|mint}}{{FTUI Klasse|yellow}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Hintergrundfarben<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|bg-red}}{{FTUI Klasse|bg-green}}{{FTUI Klasse|bg-blue}}{{FTUI Klasse|bg-lightblue}}{{FTUI Klasse|bg-orange}}{{FTUI Klasse|bg-gray}}{{FTUI Klasse|bg-lightgray}}{{FTUI Klasse|bg-white}}{{FTUI Klasse|bg-black}}{{FTUI Klasse|bg-mint}}{{FTUI Klasse|bg-yellow}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Rahmen<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|verticalLine}}{{FTUI Klasse|border-black}}{{FTUI Klasse|border-white}}{{FTUI Klasse|border-orange}}{{FTUI Klasse|border-red}}{{FTUI Klasse|border-green}}{{FTUI Klasse|border-mint}}{{FTUI Klasse|border-lightblue}}{{FTUI Klasse|border-blue}}{{FTUI Klasse|border-gray}}{{FTUI Klasse|border-yellow}}{{FTUI Klasse|border-lightgray}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Größen<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|mini}}{{FTUI Klasse|tiny}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|tall}}{{FTUI Klasse|great}}{{FTUI Klasse|grande}}{{FTUI Klasse|gigantic}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Schriftstil<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|thin}}{{FTUI Klasse|bold}}{{FTUI Klasse|darker}}{{FTUI Klasse|truncate}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Sonstiges<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|blank}}{{FTUI Klasse|transparent}}{{FTUI Klasse|half-transparent}}{{FTUI Klasse|blurry}}{{FTUI Klasse|shake}}{{FTUI Klasse|fail-shake}}{{FTUI Klasse|marquee}}{{FTUI Klasse|icon round}}{{FTUI Klasse|icon square}}{{FTUI Klasse|readonly}}{{FTUI Klasse|blink}}{{FTUI Klasse|rotate-90}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|circleborder}}{{FTUI Klasse|autohide}}{{FTUI Klasse|notransmit}}{{FTUI Klasse|tap}}{{FTUI Klasse|FS20}}{{FTUI Klasse|value}}{{FTUI Klasse|novalue}}{{FTUI Klasse|timestamp}}{{FTUI Klasse|percent}}{{FTUI Klasse|nocache}}{{FTUI Klasse|fade}}{{FTUI Klasse|rotate}}{{FTUI Klasse|nolabels}}{{FTUI Klasse|default}}{{FTUI Klasse|prefetch}}{{FTUI Klasse|circulate}}{{FTUI Klasse|valueonly}}{{FTUI Klasse|positiononly}}{{FTUI Klasse|lineIndicator}}{{FTUI Klasse|barIndicator}}{{FTUI Klasse|roundIndicator}}{{FTUI Klasse|dim-tick}}{{FTUI Klasse|dim-front}}{{FTUI Klasse|dim-back}}{{FTUI Klasse|hue-tick}}{{FTUI Klasse|hue-front}}{{FTUI Klasse|hue-back}}{{FTUI Klasse|warn}}{{FTUI Klasse|activate}}{{FTUI Klasse|labelright}}{{FTUI Klasse|interlock}}{{FTUI Klasse|keepopen}}{{FTUI Klasse|noshade}}<br />
|}<br />
<br />
=== Überlagerung von Text und Bild ===<br />
[[Datei:FTUI_Text_auf_Bild.png||thumb|right]]<br />
Texte können auf Bildern positioniert werden:<br />
<syntaxhighlight lang="html5"><br />
<li data-row="1" data-col="4" data-sizey="4" data-sizex="6"><br />
<div class="display"><br />
<div data-type="image" data-url="https://picsum.photos/200/125/?random" data-size="100%"></div><br />
<div class="display-center bigger" data-type="label">Text1</div><br />
<div class="display-topright bigger right-space top-space" data-type="label">Text2</div><br />
<div class="ontop bigger" style="left: 120px; top: 50px">Text3</div><br />
</div><br />
</li><br />
</syntaxhighlight><br />
<br />
Zur Verfügung stehen folgende Grundpositionen:<br />
* <code>display-topleft</code><br />
* <code>display-topcenter</code><br />
* <code>display-topright</code><br />
* <code>display-centerleft</code><br />
* <code>display-left</code><br />
* <code>display-centerright</code><br />
* <code>display-right</code><br />
* <code>display-bottomleft</code><br />
* <code>display-bottomcenter</code><br />
* <code>display-bottomright</code><br />
<br />
Feinjustage ist möglich über<br />
<br />
* <code>right-space</code><br />
* <code>top-space</code><br />
* <code>left-space</code><br />
* <code>bottom-space</code><br />
* <code>right-space-2</code><br />
* <code>top-space-2</code><br />
* <code>left-space-2</code><br />
* <code>bottom-space-2</code><br />
* <code>right-space-3</code><br />
* <code>top-space-3</code><br />
* <code>left-space-3</code><br />
* <code>bottom-space-3</code><br />
<br />
<br />
[[Datei:FTUI_Beispiel_Positionierung.png|200px|thumb|right]]<br />
Verallgemeinert lassen sich auf diese Weise '''Objekte frei im Elternelement positionieren''':<br />
<syntaxhighlight lang="html5"><br />
<div class="display" data-type="html"><br />
<div class="display-topcenter top-space big">Fenster</div><br />
<div class="display-center fa fa-4x ftui-window"></div><br />
<div class="display-bottomleft bottom-space left-space" data-type="label">Text</div><br />
</div><br />
</syntaxhighlight><br />
=== Icons ===<br />
FTUI bringt einige Icons-"Schriftarten" mit, die für die Darstellung genützt werden können. Diese werden automatisch beim Start des UI eingebunden, sobald ein entsprechendes Icon-Präfix im Code der Seite vorkommt.<br />
<br />
Verfügbare Icon-Schriftarten sind:<br />
* Eingebaute Icons ''ftui-window'' und ''ftui-door''. Präfix '''ftui-'''. Beispiel: <code>data-icon="ftui-door"</code><br />
* [http://fontawesome.io/icons/ Font-Awesome]: Mehr als 500 Icons zur Auswahl. Präfix '''fa-'''. Beispiel: <code>data-icon="fa-volume-up"</code><br />
* [https://material.io/icons/ Material Icons]: Mehr als 900 Icons zur Auswahl. Präfix '''mi-'''. Beispiel: <code>data-icon="mi-local_gas_station"</code><br />
* FHEM und OpenAutomation Icons: Präfix '''fs-''' und '''oa-'''. Beispiel: <code>data-icon="oa-secur_locked"</code><br />
* [https://erikflowers.github.io/weather-icons/ Weather-Icons]: Präfix '''wi '''. Beispiel: <code>data-icon="wi wi-day-rain-mix"</code><br />
<br />
Alternativ können auch Bilder Icons (bspw. png) über CSS verwendet werden. Bspw:<br />
<syntaxhighlight lang="html5"><br />
<head><br />
<style type="text/css"><br />
.logo-fhem {<br />
background: url(https://wiki.fhem.de/fhemlogo.png) no-repeat;<br />
width: 120px;<br />
height: 132px;<br />
background-size: contain;<br />
}<br />
</style><br />
</head><br />
<body><br />
<div data-type="symbol" data-icon="logo-fhem"></div><br />
</body><br />
</syntaxhighlight><br />
<br />
== Widgets ==<br />
===Allgemeine Attribute===<br />
Jedes Widget kann über verschiedene Attribute konfiguriert werden. Folgende Attribute gelten für alle Widgets:<br />
<br />
{| class="wikitable"<br />
|+allgemeine Attribute<br />
|-<br />
!align="right" |data-type<br />
|Widget-Typ<br />
|-<br />
!align="right" |data-device<br />
|FHEM-Name des Gerätes (mit dem Befehl 'list' bekommt man im FHEM die kpl. Liste)<br />
|-<br />
!align="right" |class<br />
|CSS-Klassen für Aussehen und Formatierung des Widgets<br />
|-<br />
|}<br />
<br />
{| class="wikitable"<br />
|+Daten Empfangen<br />
|-<br />
!align="right" |data-get<br />
|Reading Name<br />
|-<br />
!align="right" |data-get-on<br />
|Wert für den Status on<br />
|-<br />
!align="right" |data-get-off<br />
|Wert für den Status off<br />
|-<br />
|}<br />
<br />
{| class="wikitable"<br />
|+Daten Senden<br />
|-<br />
!align="right" |data-set<br />
|Reading Name<br />
|-<br />
!align="right" |data-set-on<br />
|Wert für den Status on<br />
|-<br />
!align="right" |data-set-off<br />
|Wert für den Status off<br />
|-<br />
|}<br />
<br />
Widget-spezifische Attribute können auf der jeweiligen Widget-Seite nachgelesen werden.<br />
<br />
=== Integrierte Widgets ===<br />
Folgende Widgets sind direkt in FHEM Tablet UI integriert und können "out of the box" verwendet werden.<br />
<br />
* [[FTUI Widget Button|button]]: Variante der push und switch Widgets, die entweder einen URL ansteuern oder einen FHEM-Befehl absetzen kann<br />
* [[FTUI Widget Checkbox|checkbox]]: Umschalter zwischen zwei definierten Zuständen<br />
* [[FTUI Widget Circlemenu|circlemenu]]: Mehrere Widgets hinter einem Widget verborgen, trotz des 'circle' im Namen kann das Menue jetzt auch horizontal oder vertikal ausgeklappt werden <br />
* [[FTUI Widget Clock|clock]]: Stellt eine einfache Uhr zur Verfügung<br />
* [[FTUI Widget Colorwheel|colorwheel]]: Farbpalette zur Auswahl von Farben<br />
* [[FTUI Widget Controlbutton|controlbutton]]: iOS-ähnlicher Button zum Schalten zwischen zwei Zuständen (z.B. on / off)<br />
* [[FTUI Widget Controller|controller]]: iOS-ähnlicher vertikaler Schieberegler zum Einstellen eines Wertes<br />
* [[FTUI Widget Datetimepicker|datetimepicker]]: Erstellt eine Auswahl für Datum/Uhrzeit<br />
* [[FTUI Widget Departure|departure]]: Abfahrtszeiten öffentlicher Verkehrsmittel<br />
* [[FTUI Widget Dimmer|dimmer]]: Ein-/Aus-Button mit integriertem Schieberegler für z.B. einen Dim-Wert<br />
* [[FTUI Widget Eventmonitor|eventmonitor]]:<br />
* [[FTUI Widget Homestatus|homestatus]]: Auswahl für vier oder fünf definierte Stati eines Objects (z.B.: FHEM Residents)<br />
* [[FTUI Widget Html|html]]:<br />
* [[FTUI Widget Iframe|iframe]]: Widget zum Einbinden externer Inhalte in einem Iframe<br />
* [[FTUI Widget Image|image]]: Zeigt ein Bild, dessen URL fest vorgegeben oder aus einem Device-Reading gelesen werden kann<br />
* [[FTUI Widget Input|input]]: Erstellen eines Texteingabefeldes<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/joinedlabel joinedlabel]: verbindet mehrere Readings zu einem Feld<br />
* [[FTUI Widget Klimatrend|klimatrend]]: wandelt Daten aus dem statistics-Modul in einen Pfeil um, der den aktuellen Trend anzeigt<br />
* [[FTUI Widget Knob|knob]]: Erstellt einen Statusbalken auf einer Kreisbahn<br />
* [[FTUI Widget Label|label]]: Reading als Text anzeigen<br />
* [[FTUI Widget Level|level]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert<br />
* [[FTUI Widget Link|link]]: Erstellt einen Link oder Button zum Aufrufen von URLs oder Senden von Befehlen an FHEM<br />
* [[FTUI Widget Medialist|medialist]]:<br />
* [[FTUI Widget Multistatebutton|multistatebutton]]: Variante des push-Widgets, welches den set-Befehl abhängig vom gelesenen Status ändert<br />
* [[FTUI Widget Notify|notify]]: Blendet ein Hinweisfenster im Browser ein<br />
* [[FTUI Widget Pagebutton|pagebutton]]: Button, mit dem auf andere Seiten gesprungen werden kann. Eignet sich gut für eine Navigation<br />
* [[FTUI Widget Pagetab|pagetab]]: Tauscht den Inhalt einer Seite durch den einer anderen. Eignet sich gut für ein Navigationsmenü<br />
* [[FTUI Widget Playstream|playstream]]: Abspielen eines Webradio-Streams per Button<br />
* [[FTUI Widget Popup|popup]]: Öffnet ein Popup nach einem Klick auf ein Widget oder HTML-Element <br />
* [[FTUI Widget Progress|progress]]: Zeigt einen Prozentwert in Form einer runden Fortschrittsleiste<br />
* [[FTUI_Widget_Push|push]]: Button, mit dem ein Befehl an FHEM gesendet werden kann<br />
* [[FTUI Widget Range|range]]: Erstellt vertikale Balken, die einen Wertebereich in unterschiedlichen Farben darstellen<br />
* [[FTUI Widget Readingsgroup|readingsgroup]]: Zeigt eine Readingsgroup an, wie sie in FHEM definiert wurde<br />
* [[FTUI Widget Rotor|rotor]]: Animiertes Umschalten von zwei oder mehr Widgets an einer Position<br />
* [[FTUI Widget Scale|scale]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert<br />
* [[FTUI_Widget_Select|select]]: Combobox, die eine Liste an Werten zur Auswahl anzeigt<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/settimer settimer]: Zum Anzeigen und Einstellen einer Uhrzeit<br />
* [[FTUI Widget Simplechart|simplechart]]: Einfaches XY-Diagramm zur Anzeige eines Wertes, der direkt aus einem FHEM-Logfile gelesen wird<br />
* [[FTUI Widget Slideout|slideout]]:<br />
* [[FTUI Widget Slider|slider]]: Vertikaler Schieberegler zum Einstellen eines Wertes <br />
* [[FTUI Widget Spinner|spinner]]: Element, um Werte durch Drücken auf Plus-/Minus- oder Höher-/Tiefer-Icons zu ändern<br />
* [[FTUI Widget Swiper|swiper]]: Bietet die Möglichkeit, durch Wischen zwischen verschiedenen Seiten zu wechseln<br />
* [[FTUI Widget Switch|switch]]: Button, um zwischen zwei Zuständen zu schalten (z.B. on / off)<br />
* [[FTUI Widget Symbol|symbol]]: Status eines Devices als Symbol darstellen (z.B. Fenster offen)<br />
* [[FTUI Widget Theme|theme]]: Kontextspezifisches Design<br />
* [[FTUI Widget Thermostat|thermostat]]: Anzeige für Heizungsthermostate, mit der die gewünschte Temperatur eingestellt werden kann<br />
* [[FTUI Widget Volume|volume]]: Einstellscheibe zur Änderung eines einzelnen Wertes<br />
* [[FTUI Widget Weather|weather]]: Wettersymbol anzeigen<br />
* [[FTUI Widget WindDirection|wind_direction]]: Anzeige der Windrichtung auf einer Windrose<br />
<br />
===3rd Party Widgets===<br />
Für diese Widgets kann nicht sichergestellt werden, dass sie mit der jeweils aktuellen Version von FTUI funktionieren.<br />
* [[FTUI Widget Agenda|agenda]]: Zeigt Kalendereinträge in einer Listenform an<br />
* [[FTUI_Widget_Analogclock|analogclock]]: Analoguhr<br />
* [[FTUI Widget Calview|calview]]: Zeigt Einträge aus einem [[CALVIEW]]-Device an<br />
* [[FTUI Widget Chart|chart]]: Diagramm mit ähnlichen Möglichkeiten wie die FHEM-Plots<br />
* [[FTUI Widget Classchanger|classchanger]]: Ändert seine CSS-Klassen je nach Status eines Devices<br />
* [[FTUI Widget Clicksound|clicksound]]: Mit dem Widget "clicksound" können Sounds an Click-Events von Elementen gebunden werden.<br />
* [[FTUI Widget Dwdweblink|dwdweblink]]: Grafische Anzeige DWD-Wetter-Weblink<br />
* [[FTUI Widget Filelog|filelog]]: Teile aus einem FHEM Logfile anzeigen<br />
* [[FTUI Widget Fullcalview|fullcalview]]:<br />
* [[FTUI Widget Gds|gds]]:<br />
* [[FTUI Widget Maps|maps]]: Kartendarstellung mit Google Maps API<br />
* [[FTUI Widget Highchart|highchart]]:<br />
* [[FTUI Widget Highchart3d|highchart3d]]:<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/itunes_artwork itunes_artwork]: itunes_artwork durchsucht die iTunes-Datenbank anhand eines Arrays von beliebigen Suchworten nach einem Cover-Artwork und zeigt dieses an. <br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/javascript javascript]: Ermöglicht die Ausführung beliebigen Javascript-Codes aus einem Reading.<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/kodinowplaying kodinowplaying]: zeigt Informationen zu grade in KODI gespielten Medien in Form eines Labels an.<br />
* [[FTUI Widget Loading|loading]]:<br />
* [[FTUI Widget Meteogram|meteogram]]:<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/mpdnowplaying mpdnowplaying]: Zeigt Titelinformationen eines per MPD-Modul angebundenen Music Player Daemon an.<br />
* [https://forum.fhem.de/index.php/topic,79283.msg712855.html#msg712855 pinpad]: Pinpad für z.B. eine Alarmanlage<br />
* [https://forum.fhem.de/index.php/topic,76643.msg685472.html#msg685472 postme]: Liste des PostMe-Devices anzeigen<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/reload reload]: auslösen eine Pagereloads<br />
* [[FTUI Widget Screensaver|screensaver]]:<br />
* [https://forum.fhem.de/index.php/topic,73497.0.html scrolllabel]: Texte in Laufschrift darstellen<br />
* [[FTUI Widget Svgplot|svgplot]]: Unveränderte Übernahme eine bestehenden SVG-Plots<br />
* [https://forum.fhem.de/index.php?topic=82883.msg750237#msg750237 todoist]: einfaches widget für todoist<br />
* [[FTUI Widget Tts|tts]]: Sprachausgabe eines Textes aus einem Reading auf dem Endgerät.<br />
* [[FTUI Widget UWZ|uwz]]: Anzeige der Warnungen der Unwetterzentrale<br />
* [[FTUI Widget Wakeup|wakeup]]:<br />
* [https://github.com/svenson08/ftui-weekdaytimer-widget wdtimer]: Visualisierung des [[WeekdayTimer]] Modul<br />
* [[FTUI Widget Weekprofile|weekprofile]]: Visualisierung des [[weekprofile]] Moduls<br />
* [[FTUI Widget Weatherdetail|weatherdetail]]: Detaillierte Wettervorhersage über 4 Tage (Nutzt das Proplanta Modul)<br />
<br />
===Anwendungsbeispiele===<br />
Durch die Verbindung von Widgets mit dem FHEM-Umfeld entstehen Lösungen für typische Anwendungen.<br />
* [[FTUI_Beispiel_Datetimepicker_für_Timer|Datetimepicker für Timer]]: Oberfläche für Timereinstellungen<br />
* [[FTUI_Beispiel_Mondphase|Mondphase]]: Visuelle Darstellung der Mondphase<br />
* [[FTUI_Beispiel_Webradio|Webradio]]<br />
* [[FTUI Beispiel Zeitschaltung|Verschiedene Zeitschaltungen]]<br />
<br />
==Templates==<br />
Kommt ein bestimmtes "Code-Fragment" auf mehreren Seiten oder öfter pro Seite vor, bietet FTUI die Option, Templates zu erstellen. Diese werden einmal gebaut und können dann mit dem Attribut '''data-template''' nach Belieben in eine Seite eingefügt werden. Dabei besteht auch die Möglichkeit, Variablen zu verwenden.<br />
<br />
Die Variablennamen sollten möglichst eindeutig und unverwechselbar gewählt werden, da bei der Verwendung von Templates im Prinzip Suchen & Ersetzen angewendet wird. Verwendet man beispielsweise die Variablen '''dev:Thermostat_Kueche''' und '''dev_temp:temperatue''', so kann es passieren, dass die Ergebnisse im erzeugten Code dann '''Thermostat_Kueche''' und '''Thermostat_Kueche_temp''' lauten, statt wie gewünscht '''Thermostat_Kueche''' und '''temperature'''. Um dies zu vermeiden, sollten die Variablen besser '''device:Thermostat_Kueche''' und '''temp:temperatue''' lauten.<br />
<br />
Im Folgenden ein paar Beispiele, wie Templates verwendet werden können.<br />
<br />
===Einzelnes Widget===<br />
Soll ein Widget an mehreren Stellen in exakt der selben Ausführung eingebunden werden, kann diese Widget in einer eigenen Datei erstellt und diese dann auf den Zielseiten automatisch mitgeladen werden.<br />
<br />
;Template-Seite<br />
Die Template-Seite soll in diesem Beispiel ''template_symbol.html'' genannt werden. Diese wird daher zuerst im FTUI-Verzeichnis erstellt.<br />
<syntaxhighlight lang="html"><br />
<div data-type="symbol"<br />
data-device="dummy1"><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
Die oben erstellte Template-Seite kann nun in jeder gewünschten Seite eingebunden werden.<br />
<syntaxhighlight lang="html" highlight="6"><br />
[...]<br />
<body><br />
<div class="gridster"><br />
<ul><br />
<li data-row="1" data-col="1" data-sizey="1" data-sizex="1"><br />
<div data-template="template_symbol.html"></div><br />
</li><br />
</ul><br />
</div><br />
</body><br />
[...]<br />
</syntaxhighlight><br />
<br />
===Gridster-Element===<br />
Natürlich kann auch ein ganzes Gridster-Element - in diesem Fall ein Menü - als Template eingebunden werden.<br />
<syntaxhighlight lang="html"><br />
<li data-row="1" data-col="1" data-sizex="1" data-sizey="4" data-template="menu.html"></li><br />
</syntaxhighlight><br />
<br />
=== Widget-Gruppen ===<br />
Die Template-Datei des [[#Einzelnes Widget|ersten Beispiels]] kann natürlich auch mehrere Widgets auf einmal enthalten.<br />
<br />
=== Verwendung von Variablen ===<br />
==== Einfaches Beispiel ====<br />
Oft wird ein und dasselbe Widget für verschiedenen Devices verwendet. Um nicht für jedes Device das Widget neu kopieren zu müssen (bzw. bei Änderungen alle Seiten ausbessern zu müssen), kann ein Template verwendet werden, dem einfach per Parameter mitgeteilt wird, von welchem Device es gerade die Daten empfangen soll.<br />
<br />
In diesem Beispiel wird ein Template erzeugt, dass nur die Temperatur verschiedenen Thermostate mittels eines [[FTUI Widget Label|Label-Widgets]] anzeigt.<br />
<br />
;Template-Seite<br />
Die Template-Seite enthält nur ein einfaches Label-Widget und wird in diesem Beispiel ''template_label.html'' genannt. Um sie für mehrere Devices verwenden zu können, wird im Attribut '''data-device''' der Name des eigentlichen Devices durch den Parameter '''par01''' ersetzt.<br />
<syntaxhighlight lang="html" highlight="2"><br />
<div data-type="label"<br />
data-device="par01"<br />
data-get="measured-temp"></div><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
Auf der Haupt-Seite wird die Template-Seite mit dem Attribut '''data-template''' eingebunden und ihr via Attribut '''data-parameter''' das jeweils gewünschte Device übergeben.<br />
<syntaxhighlight lang="html"><br />
[...]<br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat1"}'></div><br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat2"}'></div><br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat3"}'></div><br />
[...]<br />
</syntaxhighlight><br />
<br />
==== Wetter-Slider mit Template ====<br />
In diesem Beispiel wird ein [[FTUI Widget Slider|Slider-Widget]] erstellt, welches die verschiedenen Tage eines Wetterberichtes anzeigt. Dabei wird für den Wetterbericht des jeweiligen Tages immer dasselbe Template verwendet um nicht für jeden Tag ein eigenes Widget schreiben zu müssen.<br />
<br />
;Template-Seite<br />
<syntaxhighlight lang="html"><br />
<div class="left"><br />
<div data-type="label" data-device="AgroWeather" data-get="par01" data-unit="&deg;C"></div><br />
<div class="inline"><br />
<div data-type="label" data-device="AgroWeather" data-get="par02"></div><br />
<div data-type="weather" data-device="AgroWeather" data-get="par02"></div><br />
min:&nbsp;<div data-type="label" data-device="AgroWeather" data-get="par03" data-unit="&deg;C"></div><br />
</div><br />
</div><br />
<div class="left"><br />
<div data-type="label" data-device="AgroWeather" data-get="par04" data-substitution="toDate().eeee()+','"></div><br />
<div data-type="label" data-device="AgroWeather" data-get="par04" data-substitution="toDate().ddmm()"></div><br />
</div><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
In der Haupt-Seite wird das Template dann für jede Slider-Seite eingebunden und das Reading für den jeweiligen Tag via Parameter übergeben.<br />
<syntaxhighlight lang="html"><br />
[...]<br />
<div data-type="swiper"><br />
<ul><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc0_tempMax","par02":"fc0_weatherDay","par03":"fc0_tempMin","par04":"fc0_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc1_tempMax","par02":"fc1_weatherDay","par03":"fc1_tempMin","par04":"fc1_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc2_tempMax","par02":"fc2_weatherDay","par03":"fc2_tempMin","par04":"fc2_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc3_tempMax","par02":"fc3_weatherDay","par03":"fc3_tempMin","par04":"fc3_date"}'></li><br />
</ul><br />
</div><br />
[...]<br />
</syntaxhighlight><br />
<br />
== JavaScript-Funktionen ==<br />
Neben den Widgets können auch einige JavaScript-Funktionen verwendet werden, um Befehle an FHEM zu senden.<br />
<br />
<br />
Folgende Zeile setzt einen direkten Befehl an FHEM ab (<code>set dummy1 off</code>):<br />
<syntaxhighlight lang="html"><div onclick="ftui.setFhemStatus('set dummy1 off')">Dummy1 aus</div></syntaxhighlight><br />
<br />
<br />
Diese Zeile veranlasst FHEM dazu, eine Funktion aus der 99_myUtils.pm auszuführen (<code>myUtils_HeizungUpDown("WZ.Thermostat_Climate","up")</code>):<br />
<syntaxhighlight lang="html"><div onclick="ftui.setFhemStatus('{myUtils_HeizungUpDown(&quot;WZ.Thermostat_Climate&quot;,&quot;up&quot;)}')">+</div></syntaxhighlight><br />
<br />
<br />
Ein Beispiel, wie ein Kommando an FHEM gesendet wird und gleichzeitig der Wert eines bereits in FTUI angezeigten Readings verwendet werden kann:<br />
<syntaxhighlight lang="html"><br />
<div data-type="label" data-device="dummy1" data-get="temperature"></div><br />
<div onClick="ftui.setFhemStatus('set dummy2 '+ftui.getDeviceParameter('dummy1','temperature').val);">Senden</div><br />
</syntaxhighlight><br />
<br />
== Eigene Widgets erstellen ==<br />
Wie eigenen Widgets für FTUI erstellt werden können, ist auf der Seite [[FTUI eigene Widgets]] beschrieben.<br />
<br />
Eine Schritt für Schritt Anleitung für das erste eigene Widget gibts hier [[FTUI eigene Widgets - Beispiel]]<br />
<br />
== FAQ ==<br />
Häufig gestellte Fragen zum FHEM Tablet UI sind in der [[FHEM Tablet UI FAQ]] zusammengestellt.<br />
<br />
== Links ==<br />
* [https://github.com/knowthelist/fhem-tablet-ui Projekt auf Github]<br />
* {{Link2Forum|Topic=34233|LinkText=Forums-Beitrag}}<br />
* [[FTUI_Snippets|Snippets]]<br />
* [http://knowthelist.github.io/fhem/tablet/demo_widgets.html Live-Demos]<br />
* [https://waschto.eu/fhem-und-tabletui-livedemo/ FHEM und TabletUI Live-Demo]<br />
* {{Link2Forum|Topic=37378|LinkText=User-Demos}}<br />
* [https://github.com/ovibox/fhem-ftui-user-demos Download der User-Demo-Dateien]<br />
<br />
[[Kategorie:FHEM Tablet UI|!]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&diff=30498FHEM Tablet UI2019-05-25T08:03:03Z<p>No Legend: /* Integrierte Widgets */ weatherdetail widget entfernt, da widget nicht integriert ist</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Oberfläche für FHEM<br />
|ModType=x<br />
|ModFTopic=34233<br />
|ModForumArea=TabletUI<br />
|ModTechName=n.a.<br />
|ModOwner=setstate ({{Link2FU|7023|Forum}})<br />
}}<br />
[[FHEM Tablet UI]] (FTUI) ist ein leichtgewichtiges aber funktionsreiches Frontend-Framework zum Steuern und Überwachen von in FHEM integrierten Geräten. Es basiert auf HTML/CSS/JavaScript und stellt somit keine zusätzlichen Anforderungen an den FHEM-Server.<br />
<br />
Mit Hilfe zahlreicher Widgets, die sehr leicht mit HTML Code konfiguriert werden können, ist es möglich, innerhalb kurzer Zeit ein den eigenen Wünschen entsprechendes User-Interface aufzubauen.<br />
<br />
Für den Betrieb ist nur eine FHEM-Installation mit [[HTTPSRV|HTTPSRV-Modul]] sowie ein gängiger Webbrowser notwendig.<br />
<br />
Mit wenigen Anpassungen ist es auch möglich, das UI auf anderen Webservern (Apache, u.a.) zu betreiben. Somit können FHEM und FHEM Tablet UI auch auf getrennten Systemen ausgeführt werden.<br />
<br />
[[File:tablet_ui.png|thumb|500px|center|Beispiel für ein mit [[FHEM Tablet UI]] erstelltes User-Interface]]<br />
<br />
{{Todo|Design-Möglichkeiten erklären, Navigationsmethoden ausformulieren}} <br />
<br />
== Installation ==<br />
Die Installation von FHEM Tablet UI erzeugt keinen großen Aufwand und besteht im Großen und Ganzen aus drei Schritten:<br />
*Dateien aus dem GitHub-Repository herunterladen<br />
*FHEM konfigurieren ([[HTTPSRV]]-Device erstellen, [[FHEMWEB]]-Attribut longpoll einstellen)<br />
*Eine Beispieldatei anlegen<br />
<br />
<br />
{{Hinweis|Diese Anleitung geht davon aus, dass FHEM unter Debian nach der Anleitung [https://debian.fhem.de Stable build using apt] installiert wurde.<br />
Ist dies nicht der Fall, muss der Pfad '''/opt/fhem''' dementsprechend angepasst werden.}}<br />
<br />
<br />
'''1.''' Zuerst müssen alle Dateien von FHEM Tablet UI in das FHEM-Verzeichnis '''/opt/fhem/www''' kopiert werden. Das geht mit folgendem '''update'''-Befehl über die FHEM-Befehlszeile.<br />
:<code>update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</code><br />
<br />
:[[Datei:FTUI_Installation_01.png|thumb|none|Schritt 1: Dateien kopieren]]<br />
<br />
<br />
'''2.''' Anschließend ist ein neues [[HTTPSRV]]-Device in FHEM anzulegen, welches auf den Ordner mit den gerade heruntergeladenen Dateien verweist.<br />
:<code>define TABLETUI HTTPSRV ftui/ ./www/tablet/ Tablet-UI</code><br />
<br />
:[[Datei:FTUI_Installation_02.png|thumb|none|Schritt 2: HTTPSRV-Device anlegen]]<br />
<br />
{{Hinweis|Dieser Schritt kann ausgelassen werden, wenn die Funktionalitäten von [[FHEMWEB]] ausreichend sind. Dann muss FTUI aber in weiterer Folge unter der URL '''<nowiki>http(s)://<fhem-server>:8083/fhem/tablet/index.html</nowiki>''' aufgerufen werden und es wird kein Link auf FTUI in der FHEM GUI erstellt. Vorteil ist aber, dass das FHEMWEB-Caching verwendet werden kann. Siehe dieser {{Link2Forum|Topic=86362|Message=788258}}.}}<br />
<br />
'''3.''' Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die '''longpoll'''-Einstellung im [[FHEMWEB]] Device festzulegen.<br />
<br />
:<code>attr WEB longpoll websocket</code><br />
:bzw. bei Problemen mit ''websocket''<br />
:<code>attr WEB longpoll 1</code><br />
<br />
:[[Datei:FTUI_Installation_03.png|thumb|none|Schritt 3: longpoll einstellen]]<br />
<br />
<br />
'''4.''' Weil FTUI noch nichts anzuzeigen hat, wird die Datei '''/opt/fhem/www/tablet/index-example.html''' nach '''/opt/fhem/www/tablet/index.html''' kopiert.<br />
:<code>sudo cp -a /opt/fhem/www/tablet/index-example.html /opt/fhem/www/tablet/index.html</code><br />
<br />
:[[Datei:FTUI_Installation_04.png|thumb|none|Schritt 4: index.html erstellen]]<br />
<br />
<br />
'''5.''' Abschließend muss FHEM noch '''neu gestartet''' werden (''shutdown restart'') da das Attribut '''longpoll''' geändert wurde.<br />
<br />
<br />
Somit ist FHEM Tablet UI bereit zur Verwendung und kann durch Aufruf der URL '''<nowiki>http://<fhem-server>:8083/fhem/ftui/</nowiki>''' oder den Link im FHEM-Menü geöffnet werden<br />
<br />
== Update ==<br />
Ein Update von FTUI kann ebenfalls über die FHEM-Kommandozeile erfolgen.<br />
<br />
'''1.''' Prüfen der Änderungen seit dem letzten Download/Update durch Eingabe von:<br />
:<code><nowiki>update check https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
<br />
'''2.''' Update der geänderten Dateien durch Eingabe von:<br />
:<code><nowiki>update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
<br />
Eine weitere Option ist das Hinzufügen des FTUI-Git-Repositories zum allgemeinem Update-Vorgang von FHEM. Dabei wird dann bei einem FHEM-Update auch gleich FHEM Tablet UI aktualisiert, bzw. die Änderungen angezeigt.<br />
:<code><nowiki>update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt</nowiki></code><br />
<br />
Beachte: Das Ergebnis des o.g. Befehls wird in FHEM/controls.txt eingetragen, siehe auch [[Update#update_add]]<br />
<br />
== Konfiguration ==<br />
===DOCTYPE===<br />
In allen HTML-Dateien, die im Browser geladen werden und das typische HTML-Gerüst besitzen (also alle Hauptseiten, jedoch keine Template-Dateien), sollte eine ''Document Type Declaration'' (DTDT) eingefügt werden. Mit ihr wird festgelegt, welche ''Document Type Definition'' hier verwendet wird (das kommt aus der Metasprache XML), konkret also, in welcher Version der nachfolgende HTML-Code vom Browser interpretiert werden soll. Lässt man die DTDT weg, oder definiert sie auf verschiedenen Seiten unterschiedlich, kann ein und der selbe HTML-Code zu unterschiedlichen Darstellungen führen. Die DTDT erfolgt immer auf der ersten Zeile, noch vor dem <code><html></code>-Tag. Nachfolgend wird HTML5 verwendet.<br />
<br />
<syntaxhighlight lang="html"><br />
<!DOCTYPE html><br />
<html><br />
<head>...</head><br />
<body>...</body><br />
</html><br />
</syntaxhighlight><br />
<br />
===META-Parameter===<br />
Das Tablet UI lässt sich über die META-Parameter konfigurieren. Diese Parameter sind in jeder '''.html''' Datei (z.B. index.html) im Abschnitt '''<head>''' einzutragen. Ausgenommen davon sind Dateien, die als Template, Pagebutton-Zielseiten oder ähnliches eingebunden werden.<br />
<br />
Die Parameter sind immer nach diesem Schema aufgebaut:<br />
<meta name="[Parameter-Name]" content="[Parameter-Wert]"><br />
<br />
===Verbindung zu FHEM===<br />
{| class="wikitable"<br />
|-<br />
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung<br />
|-<br />
|web_device||WEB||String||FHEM-Device, welches für das Polling verwendet wird<br />
|-<br />
|longpoll||1||0, 1||<br />
'''0''': Longpoll deaktiviert; alle 30s ein Shortpoll (Neuladen der gesamten Statusänderungen)<br />
<br />
'''1''': Longpoll aktiv; geänderte Stati werden sofort aktualisiert, zusätzlich werden alle 15min die gesamten Statusänderungen geladen.<br />
|-<br />
|longpoll_type||websocket||websocket, ajax, 0||<br />
'''websocket''': Für die Aktualisierung der Daten wird das Websocket-Protokoll verwendet. Werden vom Browser keine Websockets unterstützt, gibt es einen automatischen Fallback auf Ajax.<br />
<br />
'''ajax''': Ajax wird für die Aktualisierung verwendet.<br />
<br />
'''0''': Longpoll deaktiviert, Shortpoll wird verwendet.<br />
|-<br />
|longpoll_filter||.*||RegEx||Event-Filter. Kann verwendet werden, wenn z.B. Devices, die in FTUI angezeigt werden, in einem eigenen FHEM-Room sind.<br />
|-<br />
|longpoll_maxage||240||Integer||Kommen in diesem Zeitraum (Sekunden) keine Longpoll-Events bei FTUI an, wird die Verbindung als "disconnected" angesehen und ein neuer Verbindungsversuch wird gestartet.<br />
|-<br />
|shortpoll_interval||900||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet<br />
|-<br />
|shortpoll_only_interval||30||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet, sollte Longpoll deaktiviert sein<br />
|-<br />
|fhemweb_url||/fhem/||Integer||URL zu FHEM. Wird benötigt wenn FTUI auf einem anderen als dem FHEM Server läuft oder nicht im Standard-Pfad installiert ist. <br />
Hinweis: Wenn FHEM auf einem anderem Server/Domain läuft muss man das "CORS" Attribut im FHEMWEB Modul (s.o.) auf 1 setzen, sonst bekommt man Cross Origin Fehler. <br />
|}<br />
<br />
===Funktionalität===<br />
{| class="wikitable"<br />
|-<br />
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung<br />
|-<br />
|debug||0||0 - 5||Log-Level<br />
|-<br />
|toast||5||Integer||Anzahl an gleichzeitig angezeigten Toast-Nachrichten. Um keine anzuzeigen, ist der Wert auf 0 zu setzen.<br />
|-<br />
|toast_position||bottom-left||||Position im Browserfenster, wo die Toast-Nachrichten angezeigt werden.<br />
|-<br />
|lang||de||de||Sprache der Oberfläche (für z.B. Datums-/Zeitfunktionen)<br />
|-<br />
|username||||String||Benutzername für eine Basic-Authentifierung *<br />
|-<br />
|password||||String||Passwort für eine Basic-Authentifizierung *<br />
|}<br />
'''*''' Derzeit wird die Basic-Authentifizierung in Kombination mit WebSockets nicht unterstützt. Die Verwendung von '''longpoll=1''' (ajax) ist daher notwendig.<br />
<br />
===Toast-Nachrichten===<br />
[[Datei:Ftui_toast.png|thumb|Toast-Nachrichten]]<br />
Tablet-UI liefert Informationen darüber, was im Moment gerade passiert. Das geschieht über Toast-Nachrichten, die in der Standardeinstellung unten links im Browser auftauchen.<br />
<br />
Wird beispielsweise ein Gerät eingeschaltet, so erscheint eine kleine Nachricht mit dem abgesetzten Befehl. Auch Fehlermeldungen und Statusinformationen werden angezeigt. Ob überhaupt und was konkret angezeigt wird, richtet sich nach dem eingestellten Debug-Level (siehe oben). Beim Debug-Level 5 werden alle Nachrichten angezeigt, bei 0 keine.<br />
<br />
Die Position der Toast-Nachrichten kann über den Meta-Tag <code>meta name='toast_position'</code> festgelegt werden. Für oben-mittig müsste folgender Code eingefügt werden:<br />
<pre><meta name='toast_position' content='top-center'></pre><br />
<br />
Möglich sind folgende Positionen:<br />
* <code>top-left</code><br />
* <code>top-right</code><br />
* <code>bottom-left</code><br />
* <code>bottom-right</code><br />
* <code>top-center</code><br />
* <code>bottom-center</code><br />
* <code>mid-center</code><br />
<br />
Die maximale Anzahl an Nachrichten, die gleichzeitig angezeigt werden können, lässt sich mit <code>meta name='toast'</code> Sind maximal 2 Nachrichten gewünscht, muss folgender Meta-Tag gesetzt werden:<br />
<pre><meta name='toast' content='2'></pre><br />
<br />
==Navigationsmethoden==<br />
{{Todo|Dieser Abschnitt dient derzeit lediglich als Sammlung von Stichpunkten und muss vollständig überarbeitet werden.}} <br />
<br />
'''Unterschied zwischen Pagetab und Pagebutton:<br />
<br />
'''Pagetab:''' Ganze Seite austauschen -> Menü muss auf jede Seite<br />
[[FTUI_Widget_Pagetab]]<br />
<br />
'''Pagebutton:''' Teil der Seite austauschen -> Menü nur in erster Seite<br />
[[FTUI_Widget_Pagebutton]]<br />
<br />
'''Pagelink:''' damit kann man beliebige Widgets kapseln und vorhandene Pagebutton-Seiten ansteuern <br />
[[FTUI Widget Link]]<br />
<br />
==Gestaltung==<br />
===Layout-Optionen===<br />
* [[FTUI Layout Gridster|Gridster]]<br />
* [[FTUI Layout Flex|Flex]]<br />
* [[FTUI Layout Sheet|Tabelle]]<br />
* [[FTUI Layout Row|Reihen]]<br />
<br />
=== Farben ===<br />
Es besteht die Möglichkeit, die Farbwerte in hexadezimaler Form, als RGB-Wert oder mit dem Farbnamen anzugeben. Zum Beispiel: <br />
<br />
*HEX: #ADD8E6<br />
*RBG: rgb(173, 216, 230)<br />
*Namen: lightblue<br />
<br />
Knallige Farben wie '''<span style="color: #ff0000;">#ff0000</span>''' für Rot oder '''<span style="color: #00ff00;">#00ff00</span>''' für Grün sollten vermieden werden.<br />
Es ist besser unterhalb von #D0 (208) für die Grundfarben zu bleiben.<br />
<br />
Empfohlene Farben sind z.B.:<br />
<br />
*Orange: <span style="color: #aa6900;">#aa6900</span><br />
*Rot: <span style="color: #ad3333;">#ad3333</span><br />
*Grün: <span style="color: #32a054;">#32a054</span><br />
*Blau: <span style="color: #6699FF;">#6699FF</span><br />
*Grau: <span style="color: #8C8C8C;">#8C8C8C</span><br />
<br />
Hilfreich bei der Suche nach den Farbwerten ist zum Beispiel der Color-Picker auf dieser Seite: http://www.colorpicker.com. Für die Suche nach Farben, die einen guten Kontrast bilden, diese Webseite: http://vanisoft.pl/~lopuszanski/public/colors/<br />
<br />
Im Ordner ''css'' der FTUI Installation finden sich einige vorbereitete Farbschemata. Diese können mit einem zusätzlichen Eintrag im <nowiki><head></nowiki>-Bereich der FTUI-Seite(n) aktiviert werden.<br />
<br />
Hier am Beispiel eines blauen Farbschemas:<br />
<syntaxhighlight lang="html"><br />
<html><br />
<head><br />
[...]<br />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-blue-ui.css" /><br />
[...]<br />
</head><br />
</syntaxhighlight><br />
<br />
Diese Schema-Dateien ändern alle Widgets. <br />
<gallery><br />
File:Theme_default.png|default<br />
File:Theme_blue.png|fhem-blue-ui.css<br />
File:Theme_green.png|fhem-green-ui.css<br />
File:Theme_mobile.png|fhem-mobile-ui.css<br />
File:Theme_darkblue.png|fhem-darkblue-ui.css<br />
File:Theme_darkgreen.png|fhem-darkgreen-ui.css<br />
</gallery><br />
<br />
Einzelne Widgets können durch Hinzufügen der jeweiligen [[#CSS-Klassen|CSS-Klasse]] geändert werden.<br />
<br />
===CSS-Styles===<br />
Das Layout und das Aussehen des UI kann durch diverse vorgegebene CSS-Klassen beeinflusst werden. Die verfügbaren Klassen sind im Abschnitt [[#CSS-Klassen|CSS-Klassen]] aufgeführt.<br />
<br />
Soll das Aussehen des UI durch eigene CSS-Klassen oder durch Überschreiben der vorhandenen verändert werden, kann eine eigene CSS-Datei erstellt werden, die dann bei einem eventuellen Update von FTUI nicht überschrieben wird. Diese Datei muss den Dateinamen '''fhem-tablet-ui-user.css''' haben und im Ordner '''/fhem/tablet/css''' abgelegt werden. Sie wird dann beim Aufruf von FTUI automatisch mitgeladen.<br />
<br />
=== CSS-Klassen ===<br />
Nicht alle Widgets unterstützen alle hier angegebenen Klassen. Welche genau unterstützt werden, kann auf der jeweiligen Widget-Seite nachgelesen werden.<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|sheet/row/cell-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|sheet}}{{FTUI Klasse|row}}{{FTUI Klasse|cell}}{{FTUI Klasse|cell-1-x}}{{FTUI Klasse|cell-x}}{{FTUI Klasse|left-align}}{{FTUI Klasse|right-align}}{{FTUI Klasse|bottom-align}}{{FTUI Klasse|top-align}}{{FTUI Klasse|center-align}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|row/col-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|col}}{{FTUI Klasse|col-1-x}}{{FTUI Klasse|col-x}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|hbox/vbox-Layout<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|vbox}}{{FTUI Klasse|hbox}}{{FTUI Klasse|card}}{{FTUI Klasse|phone-width}}{{FTUI Klasse|full-height}}{{FTUI Klasse|full-width}}{{FTUI Klasse|grow-0}}{{FTUI Klasse|grow-1}}{{FTUI Klasse|grow-2}}{{FTUI Klasse|grow-x}}{{FTUI Klasse|items-top}}{{FTUI Klasse|items-center}}{{FTUI Klasse|items-bottom}}{{FTUI Klasse|items-space-between}}{{FTUI Klasse|items-space-around}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Generelle Klassen für die Positionierung<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|inline}}{{FTUI Klasse|newline}}{{FTUI Klasse|top-space}}{{FTUI Klasse|top-space-2x}}{{FTUI Klasse|top-space-3x}}{{FTUI Klasse|left-space}}{{FTUI Klasse|left-space-2x}}{{FTUI Klasse|left-space-3x}}{{FTUI Klasse|right-space}}{{FTUI Klasse|right-space-2x}}{{FTUI Klasse|right-space-3x}}{{FTUI Klasse|top-narrow}}{{FTUI Klasse|top-narrow-2x}}{{FTUI Klasse|top-narrow-10}}{{FTUI Klasse|left-narrow}}{{FTUI Klasse|left-narrow-2x}}{{FTUI Klasse|left-narrow-3x}}{{FTUI Klasse|right-narrow}}{{FTUI Klasse|right-narrow-2x}}{{FTUI Klasse|right-narrow-3x}}{{FTUI Klasse|centered}}{{FTUI Klasse|wider}}{{FTUI Klasse|narrow}}{{FTUI Klasse|fullsize}}{{FTUI Klasse|compressed}}{{FTUI Klasse|height-narrow}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|maxw40}}{{FTUI Klasse|doublebox-v}}{{FTUI Klasse|doublebox-h}}{{FTUI Klasse|triplebox-v}}{{FTUI Klasse|right}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Vordergrundfarben<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|red}}{{FTUI Klasse|green}}{{FTUI Klasse|blue}}{{FTUI Klasse|lightblue}}{{FTUI Klasse|orange}}{{FTUI Klasse|gray}}{{FTUI Klasse|lightgray}}{{FTUI Klasse|white}}{{FTUI Klasse|black}}{{FTUI Klasse|mint}}{{FTUI Klasse|yellow}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Hintergrundfarben<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|bg-red}}{{FTUI Klasse|bg-green}}{{FTUI Klasse|bg-blue}}{{FTUI Klasse|bg-lightblue}}{{FTUI Klasse|bg-orange}}{{FTUI Klasse|bg-gray}}{{FTUI Klasse|bg-lightgray}}{{FTUI Klasse|bg-white}}{{FTUI Klasse|bg-black}}{{FTUI Klasse|bg-mint}}{{FTUI Klasse|bg-yellow}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Rahmen<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|verticalLine}}{{FTUI Klasse|border-black}}{{FTUI Klasse|border-white}}{{FTUI Klasse|border-orange}}{{FTUI Klasse|border-red}}{{FTUI Klasse|border-green}}{{FTUI Klasse|border-mint}}{{FTUI Klasse|border-lightblue}}{{FTUI Klasse|border-blue}}{{FTUI Klasse|border-gray}}{{FTUI Klasse|border-yellow}}{{FTUI Klasse|border-lightgray}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Größen<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|mini}}{{FTUI Klasse|tiny}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|tall}}{{FTUI Klasse|great}}{{FTUI Klasse|grande}}{{FTUI Klasse|gigantic}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Schriftstil<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|thin}}{{FTUI Klasse|bold}}{{FTUI Klasse|darker}}{{FTUI Klasse|truncate}}<br />
|}<br />
<br />
{|class="wikitable mw-collapsible mw-collapsed" style="width: 100%;"<br />
!colspan="2" style="text-align: left;"|Sonstiges<br />
|-<br />
!class="mw-collapsible-content"|Klasse!!Beschreibung<br />
{{FTUI Klasse|blank}}{{FTUI Klasse|transparent}}{{FTUI Klasse|half-transparent}}{{FTUI Klasse|blurry}}{{FTUI Klasse|shake}}{{FTUI Klasse|fail-shake}}{{FTUI Klasse|marquee}}{{FTUI Klasse|icon round}}{{FTUI Klasse|icon square}}{{FTUI Klasse|readonly}}{{FTUI Klasse|blink}}{{FTUI Klasse|rotate-90}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|circleborder}}{{FTUI Klasse|autohide}}{{FTUI Klasse|notransmit}}{{FTUI Klasse|tap}}{{FTUI Klasse|FS20}}{{FTUI Klasse|value}}{{FTUI Klasse|novalue}}{{FTUI Klasse|timestamp}}{{FTUI Klasse|percent}}{{FTUI Klasse|nocache}}{{FTUI Klasse|fade}}{{FTUI Klasse|rotate}}{{FTUI Klasse|nolabels}}{{FTUI Klasse|default}}{{FTUI Klasse|prefetch}}{{FTUI Klasse|circulate}}{{FTUI Klasse|valueonly}}{{FTUI Klasse|positiononly}}{{FTUI Klasse|lineIndicator}}{{FTUI Klasse|barIndicator}}{{FTUI Klasse|roundIndicator}}{{FTUI Klasse|dim-tick}}{{FTUI Klasse|dim-front}}{{FTUI Klasse|dim-back}}{{FTUI Klasse|hue-tick}}{{FTUI Klasse|hue-front}}{{FTUI Klasse|hue-back}}{{FTUI Klasse|warn}}{{FTUI Klasse|activate}}{{FTUI Klasse|labelright}}{{FTUI Klasse|interlock}}{{FTUI Klasse|keepopen}}{{FTUI Klasse|noshade}}<br />
|}<br />
<br />
=== Überlagerung von Text und Bild ===<br />
[[Datei:FTUI_Text_auf_Bild.png||thumb|right]]<br />
Texte können auf Bildern positioniert werden:<br />
<syntaxhighlight lang="html5"><br />
<li data-row="1" data-col="4" data-sizey="4" data-sizex="6"><br />
<div class="display"><br />
<div data-type="image" data-url="https://picsum.photos/200/125/?random" data-size="100%"></div><br />
<div class="display-center bigger" data-type="label">Text1</div><br />
<div class="display-topright bigger right-space top-space" data-type="label">Text2</div><br />
<div class="ontop bigger" style="left: 120px; top: 50px">Text3</div><br />
</div><br />
</li><br />
</syntaxhighlight><br />
<br />
Zur Verfügung stehen folgende Grundpositionen:<br />
* <code>display-topleft</code><br />
* <code>display-topcenter</code><br />
* <code>display-topright</code><br />
* <code>display-centerleft</code><br />
* <code>display-left</code><br />
* <code>display-centerright</code><br />
* <code>display-right</code><br />
* <code>display-bottomleft</code><br />
* <code>display-bottomcenter</code><br />
* <code>display-bottomright</code><br />
<br />
Feinjustage ist möglich über<br />
<br />
* <code>right-space</code><br />
* <code>top-space</code><br />
* <code>left-space</code><br />
* <code>bottom-space</code><br />
* <code>right-space-2</code><br />
* <code>top-space-2</code><br />
* <code>left-space-2</code><br />
* <code>bottom-space-2</code><br />
* <code>right-space-3</code><br />
* <code>top-space-3</code><br />
* <code>left-space-3</code><br />
* <code>bottom-space-3</code><br />
<br />
<br />
[[Datei:FTUI_Beispiel_Positionierung.png|200px|thumb|right]]<br />
Verallgemeinert lassen sich auf diese Weise '''Objekte frei im Elternelement positionieren''':<br />
<syntaxhighlight lang="html5"><br />
<div class="display" data-type="html"><br />
<div class="display-topcenter top-space big">Fenster</div><br />
<div class="display-center fa fa-4x ftui-window"></div><br />
<div class="display-bottomleft bottom-space left-space" data-type="label">Text</div><br />
</div><br />
</syntaxhighlight><br />
=== Icons ===<br />
FTUI bringt einige Icons-"Schriftarten" mit, die für die Darstellung genützt werden können. Diese werden automatisch beim Start des UI eingebunden, sobald ein entsprechendes Icon-Präfix im Code der Seite vorkommt.<br />
<br />
Verfügbare Icon-Schriftarten sind:<br />
* Eingebaute Icons ''ftui-window'' und ''ftui-door''. Präfix '''ftui-'''. Beispiel: <code>data-icon="ftui-door"</code><br />
* [http://fontawesome.io/icons/ Font-Awesome]: Mehr als 500 Icons zur Auswahl. Präfix '''fa-'''. Beispiel: <code>data-icon="fa-volume-up"</code><br />
* [https://material.io/icons/ Material Icons]: Mehr als 900 Icons zur Auswahl. Präfix '''mi-'''. Beispiel: <code>data-icon="mi-local_gas_station"</code><br />
* FHEM und OpenAutomation Icons: Präfix '''fs-''' und '''oa-'''. Beispiel: <code>data-icon="oa-secur_locked"</code><br />
* [https://erikflowers.github.io/weather-icons/ Weather-Icons]: Präfix '''wi '''. Beispiel: <code>data-icon="wi wi-day-rain-mix"</code><br />
<br />
Alternativ können auch Bilder Icons (bspw. png) über CSS verwendet werden. Bspw:<br />
<syntaxhighlight lang="html5"><br />
<head><br />
<style type="text/css"><br />
.logo-fhem {<br />
background: url(https://wiki.fhem.de/fhemlogo.png) no-repeat;<br />
width: 120px;<br />
height: 132px;<br />
background-size: contain;<br />
}<br />
</style><br />
</head><br />
<body><br />
<div data-type="symbol" data-icon="logo-fhem"></div><br />
</body><br />
</syntaxhighlight><br />
<br />
== Widgets ==<br />
===Allgemeine Attribute===<br />
Jedes Widget kann über verschiedene Attribute konfiguriert werden. Folgende Attribute gelten für alle Widgets:<br />
<br />
{| class="wikitable"<br />
|+allgemeine Attribute<br />
|-<br />
!align="right" |data-type<br />
|Widget-Typ<br />
|-<br />
!align="right" |data-device<br />
|FHEM-Name des Gerätes (mit dem Befehl 'list' bekommt man im FHEM die kpl. Liste)<br />
|-<br />
!align="right" |class<br />
|CSS-Klassen für Aussehen und Formatierung des Widgets<br />
|-<br />
|}<br />
<br />
{| class="wikitable"<br />
|+Daten Empfangen<br />
|-<br />
!align="right" |data-get<br />
|Reading Name<br />
|-<br />
!align="right" |data-get-on<br />
|Wert für den Status on<br />
|-<br />
!align="right" |data-get-off<br />
|Wert für den Status off<br />
|-<br />
|}<br />
<br />
{| class="wikitable"<br />
|+Daten Senden<br />
|-<br />
!align="right" |data-set<br />
|Reading Name<br />
|-<br />
!align="right" |data-set-on<br />
|Wert für den Status on<br />
|-<br />
!align="right" |data-set-off<br />
|Wert für den Status off<br />
|-<br />
|}<br />
<br />
Widget-spezifische Attribute können auf der jeweiligen Widget-Seite nachgelesen werden.<br />
<br />
=== Integrierte Widgets ===<br />
Folgende Widgets sind direkt in FHEM Tablet UI integriert und können "out of the box" verwendet werden.<br />
<br />
* [[FTUI Widget Button|button]]: Variante der push und switch Widgets, die entweder einen URL ansteuern oder einen FHEM-Befehl absetzen kann<br />
* [[FTUI Widget Checkbox|checkbox]]: Umschalter zwischen zwei definierten Zuständen<br />
* [[FTUI Widget Circlemenu|circlemenu]]: Mehrere Widgets hinter einem Widget verborgen, trotz des 'circle' im Namen kann das Menue jetzt auch horizontal oder vertikal ausgeklappt werden <br />
* [[FTUI Widget Clock|clock]]: Stellt eine einfache Uhr zur Verfügung<br />
* [[FTUI Widget Colorwheel|colorwheel]]: Farbpalette zur Auswahl von Farben<br />
* [[FTUI Widget Controlbutton|controlbutton]]: iOS-ähnlicher Button zum Schalten zwischen zwei Zuständen (z.B. on / off)<br />
* [[FTUI Widget Controller|controller]]: iOS-ähnlicher vertikaler Schieberegler zum Einstellen eines Wertes<br />
* [[FTUI Widget Datetimepicker|datetimepicker]]: Erstellt eine Auswahl für Datum/Uhrzeit<br />
* [[FTUI Widget Departure|departure]]: Abfahrtszeiten öffentlicher Verkehrsmittel<br />
* [[FTUI Widget Dimmer|dimmer]]: Ein-/Aus-Button mit integriertem Schieberegler für z.B. einen Dim-Wert<br />
* [[FTUI Widget Eventmonitor|eventmonitor]]:<br />
* [[FTUI Widget Homestatus|homestatus]]: Auswahl für vier oder fünf definierte Stati eines Objects (z.B.: FHEM Residents)<br />
* [[FTUI Widget Html|html]]:<br />
* [[FTUI Widget Iframe|iframe]]: Widget zum Einbinden externer Inhalte in einem Iframe<br />
* [[FTUI Widget Image|image]]: Zeigt ein Bild, dessen URL fest vorgegeben oder aus einem Device-Reading gelesen werden kann<br />
* [[FTUI Widget Input|input]]: Erstellen eines Texteingabefeldes<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/joinedlabel joinedlabel]: verbindet mehrere Readings zu einem Feld<br />
* [[FTUI Widget Klimatrend|klimatrend]]: wandelt Daten aus dem statistics-Modul in einen Pfeil um, der den aktuellen Trend anzeigt<br />
* [[FTUI Widget Knob|knob]]: Erstellt einen Statusbalken auf einer Kreisbahn<br />
* [[FTUI Widget Label|label]]: Reading als Text anzeigen<br />
* [[FTUI Widget Level|level]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert<br />
* [[FTUI Widget Link|link]]: Erstellt einen Link oder Button zum Aufrufen von URLs oder Senden von Befehlen an FHEM<br />
* [[FTUI Widget Medialist|medialist]]:<br />
* [[FTUI Widget Multistatebutton|multistatebutton]]: Variante des push-Widgets, welches den set-Befehl abhängig vom gelesenen Status ändert<br />
* [[FTUI Widget Notify|notify]]: Blendet ein Hinweisfenster im Browser ein<br />
* [[FTUI Widget Pagebutton|pagebutton]]: Button, mit dem auf andere Seiten gesprungen werden kann. Eignet sich gut für eine Navigation<br />
* [[FTUI Widget Pagetab|pagetab]]: Tauscht den Inhalt einer Seite durch den einer anderen. Eignet sich gut für ein Navigationsmenü<br />
* [[FTUI Widget Playstream|playstream]]: Abspielen eines Webradio-Streams per Button<br />
* [[FTUI Widget Popup|popup]]: Öffnet ein Popup nach einem Klick auf ein Widget oder HTML-Element <br />
* [[FTUI Widget Progress|progress]]: Zeigt einen Prozentwert in Form einer runden Fortschrittsleiste<br />
* [[FTUI_Widget_Push|push]]: Button, mit dem ein Befehl an FHEM gesendet werden kann<br />
* [[FTUI Widget Range|range]]: Erstellt vertikale Balken, die einen Wertebereich in unterschiedlichen Farben darstellen<br />
* [[FTUI Widget Readingsgroup|readingsgroup]]: Zeigt eine Readingsgroup an, wie sie in FHEM definiert wurde<br />
* [[FTUI Widget Rotor|rotor]]: Animiertes Umschalten von zwei oder mehr Widgets an einer Position<br />
* [[FTUI Widget Scale|scale]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert<br />
* [[FTUI_Widget_Select|select]]: Combobox, die eine Liste an Werten zur Auswahl anzeigt<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/settimer settimer]: Zum Anzeigen und Einstellen einer Uhrzeit<br />
* [[FTUI Widget Simplechart|simplechart]]: Einfaches XY-Diagramm zur Anzeige eines Wertes, der direkt aus einem FHEM-Logfile gelesen wird<br />
* [[FTUI Widget Slideout|slideout]]:<br />
* [[FTUI Widget Slider|slider]]: Vertikaler Schieberegler zum Einstellen eines Wertes <br />
* [[FTUI Widget Spinner|spinner]]: Element, um Werte durch Drücken auf Plus-/Minus- oder Höher-/Tiefer-Icons zu ändern<br />
* [[FTUI Widget Swiper|swiper]]: Bietet die Möglichkeit, durch Wischen zwischen verschiedenen Seiten zu wechseln<br />
* [[FTUI Widget Switch|switch]]: Button, um zwischen zwei Zuständen zu schalten (z.B. on / off)<br />
* [[FTUI Widget Symbol|symbol]]: Status eines Devices als Symbol darstellen (z.B. Fenster offen)<br />
* [[FTUI Widget Theme|theme]]: Kontextspezifisches Design<br />
* [[FTUI Widget Thermostat|thermostat]]: Anzeige für Heizungsthermostate, mit der die gewünschte Temperatur eingestellt werden kann<br />
* [[FTUI Widget Volume|volume]]: Einstellscheibe zur Änderung eines einzelnen Wertes<br />
* [[FTUI Widget Weather|weather]]: Wettersymbol anzeigen<br />
* [[FTUI Widget WindDirection|wind_direction]]: Anzeige der Windrichtung auf einer Windrose<br />
<br />
===3rd Party Widgets===<br />
Für diese Widgets kann nicht sichergestellt werden, dass sie mit der jeweils aktuellen Version von FTUI funktionieren.<br />
* [[FTUI Widget Agenda|agenda]]: Zeigt Kalendereinträge in einer Listenform an<br />
* [[FTUI_Widget_Analogclock|analogclock]]: Analoguhr<br />
* [[FTUI Widget Calview|calview]]: Zeigt Einträge aus einem [[CALVIEW]]-Device an<br />
* [[FTUI Widget Chart|chart]]: Diagramm mit ähnlichen Möglichkeiten wie die FHEM-Plots<br />
* [[FTUI Widget Classchanger|classchanger]]: Ändert seine CSS-Klassen je nach Status eines Devices<br />
* [[FTUI Widget Clicksound|clicksound]]: Mit dem Widget "clicksound" können Sounds an Click-Events von Elementen gebunden werden.<br />
* [[FTUI Widget Dwdweblink|dwdweblink]]: Grafische Anzeige DWD-Wetter-Weblink<br />
* [[FTUI Widget Filelog|filelog]]: Teile aus einem FHEM Logfile anzeigen<br />
* [[FTUI Widget Fullcalview|fullcalview]]:<br />
* [[FTUI Widget Gds|gds]]:<br />
* [[FTUI Widget Maps|maps]]: Kartendarstellung mit Google Maps API<br />
* [[FTUI Widget Highchart|highchart]]:<br />
* [[FTUI Widget Highchart3d|highchart3d]]:<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/itunes_artwork itunes_artwork]: itunes_artwork durchsucht die iTunes-Datenbank anhand eines Arrays von beliebigen Suchworten nach einem Cover-Artwork und zeigt dieses an. <br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/javascript javascript]: Ermöglicht die Ausführung beliebigen Javascript-Codes aus einem Reading.<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/kodinowplaying kodinowplaying]: zeigt Informationen zu grade in KODI gespielten Medien in Form eines Labels an.<br />
* [[FTUI Widget Loading|loading]]:<br />
* [[FTUI Widget Meteogram|meteogram]]:<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/mpdnowplaying mpdnowplaying]: Zeigt Titelinformationen eines per MPD-Modul angebundenen Music Player Daemon an.<br />
* [https://forum.fhem.de/index.php/topic,79283.msg712855.html#msg712855 pinpad]: Pinpad für z.B. eine Alarmanlage<br />
* [https://forum.fhem.de/index.php/topic,76643.msg685472.html#msg685472 postme]: Liste des PostMe-Devices anzeigen<br />
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/reload reload]: auslösen eine Pagereloads<br />
* [[FTUI Widget Screensaver|screensaver]]:<br />
* [https://forum.fhem.de/index.php/topic,73497.0.html scrolllabel]: Texte in Laufschrift darstellen<br />
* [[FTUI Widget Svgplot|svgplot]]: Unveränderte Übernahme eine bestehenden SVG-Plots<br />
* [https://forum.fhem.de/index.php?topic=82883.msg750237#msg750237 todoist]: einfaches widget für todoist<br />
* [[FTUI Widget Tts|tts]]: Sprachausgabe eines Textes aus einem Reading auf dem Endgerät.<br />
* [[FTUI Widget UWZ|uwz]]: Anzeige der Warnungen der Unwetterzentrale<br />
* [[FTUI Widget Wakeup|wakeup]]:<br />
* [https://github.com/svenson08/ftui-weekdaytimer-widget wdtimer]: Visualisierung des [[WeekdayTimer]] Modul<br />
* [[FTUI Widget Weekprofile|weekprofile]]: Visualisierung des [[weekprofile]] Moduls<br />
<br />
===Anwendungsbeispiele===<br />
Durch die Verbindung von Widgets mit dem FHEM-Umfeld entstehen Lösungen für typische Anwendungen.<br />
* [[FTUI_Beispiel_Datetimepicker_für_Timer|Datetimepicker für Timer]]: Oberfläche für Timereinstellungen<br />
* [[FTUI_Beispiel_Mondphase|Mondphase]]: Visuelle Darstellung der Mondphase<br />
* [[FTUI_Beispiel_Webradio|Webradio]]<br />
* [[FTUI Beispiel Zeitschaltung|Verschiedene Zeitschaltungen]]<br />
<br />
==Templates==<br />
Kommt ein bestimmtes "Code-Fragment" auf mehreren Seiten oder öfter pro Seite vor, bietet FTUI die Option, Templates zu erstellen. Diese werden einmal gebaut und können dann mit dem Attribut '''data-template''' nach Belieben in eine Seite eingefügt werden. Dabei besteht auch die Möglichkeit, Variablen zu verwenden.<br />
<br />
Die Variablennamen sollten möglichst eindeutig und unverwechselbar gewählt werden, da bei der Verwendung von Templates im Prinzip Suchen & Ersetzen angewendet wird. Verwendet man beispielsweise die Variablen '''dev:Thermostat_Kueche''' und '''dev_temp:temperatue''', so kann es passieren, dass die Ergebnisse im erzeugten Code dann '''Thermostat_Kueche''' und '''Thermostat_Kueche_temp''' lauten, statt wie gewünscht '''Thermostat_Kueche''' und '''temperature'''. Um dies zu vermeiden, sollten die Variablen besser '''device:Thermostat_Kueche''' und '''temp:temperatue''' lauten.<br />
<br />
Im Folgenden ein paar Beispiele, wie Templates verwendet werden können.<br />
<br />
===Einzelnes Widget===<br />
Soll ein Widget an mehreren Stellen in exakt der selben Ausführung eingebunden werden, kann diese Widget in einer eigenen Datei erstellt und diese dann auf den Zielseiten automatisch mitgeladen werden.<br />
<br />
;Template-Seite<br />
Die Template-Seite soll in diesem Beispiel ''template_symbol.html'' genannt werden. Diese wird daher zuerst im FTUI-Verzeichnis erstellt.<br />
<syntaxhighlight lang="html"><br />
<div data-type="symbol"<br />
data-device="dummy1"><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
Die oben erstellte Template-Seite kann nun in jeder gewünschten Seite eingebunden werden.<br />
<syntaxhighlight lang="html" highlight="6"><br />
[...]<br />
<body><br />
<div class="gridster"><br />
<ul><br />
<li data-row="1" data-col="1" data-sizey="1" data-sizex="1"><br />
<div data-template="template_symbol.html"></div><br />
</li><br />
</ul><br />
</div><br />
</body><br />
[...]<br />
</syntaxhighlight><br />
<br />
===Gridster-Element===<br />
Natürlich kann auch ein ganzes Gridster-Element - in diesem Fall ein Menü - als Template eingebunden werden.<br />
<syntaxhighlight lang="html"><br />
<li data-row="1" data-col="1" data-sizex="1" data-sizey="4" data-template="menu.html"></li><br />
</syntaxhighlight><br />
<br />
=== Widget-Gruppen ===<br />
Die Template-Datei des [[#Einzelnes Widget|ersten Beispiels]] kann natürlich auch mehrere Widgets auf einmal enthalten.<br />
<br />
=== Verwendung von Variablen ===<br />
==== Einfaches Beispiel ====<br />
Oft wird ein und dasselbe Widget für verschiedenen Devices verwendet. Um nicht für jedes Device das Widget neu kopieren zu müssen (bzw. bei Änderungen alle Seiten ausbessern zu müssen), kann ein Template verwendet werden, dem einfach per Parameter mitgeteilt wird, von welchem Device es gerade die Daten empfangen soll.<br />
<br />
In diesem Beispiel wird ein Template erzeugt, dass nur die Temperatur verschiedenen Thermostate mittels eines [[FTUI Widget Label|Label-Widgets]] anzeigt.<br />
<br />
;Template-Seite<br />
Die Template-Seite enthält nur ein einfaches Label-Widget und wird in diesem Beispiel ''template_label.html'' genannt. Um sie für mehrere Devices verwenden zu können, wird im Attribut '''data-device''' der Name des eigentlichen Devices durch den Parameter '''par01''' ersetzt.<br />
<syntaxhighlight lang="html" highlight="2"><br />
<div data-type="label"<br />
data-device="par01"<br />
data-get="measured-temp"></div><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
Auf der Haupt-Seite wird die Template-Seite mit dem Attribut '''data-template''' eingebunden und ihr via Attribut '''data-parameter''' das jeweils gewünschte Device übergeben.<br />
<syntaxhighlight lang="html"><br />
[...]<br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat1"}'></div><br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat2"}'></div><br />
<div data-template="template_label.html" data-parameter='{"par01":"Thermostat3"}'></div><br />
[...]<br />
</syntaxhighlight><br />
<br />
==== Wetter-Slider mit Template ====<br />
In diesem Beispiel wird ein [[FTUI Widget Slider|Slider-Widget]] erstellt, welches die verschiedenen Tage eines Wetterberichtes anzeigt. Dabei wird für den Wetterbericht des jeweiligen Tages immer dasselbe Template verwendet um nicht für jeden Tag ein eigenes Widget schreiben zu müssen.<br />
<br />
;Template-Seite<br />
<syntaxhighlight lang="html"><br />
<div class="left"><br />
<div data-type="label" data-device="AgroWeather" data-get="par01" data-unit="&deg;C"></div><br />
<div class="inline"><br />
<div data-type="label" data-device="AgroWeather" data-get="par02"></div><br />
<div data-type="weather" data-device="AgroWeather" data-get="par02"></div><br />
min:&nbsp;<div data-type="label" data-device="AgroWeather" data-get="par03" data-unit="&deg;C"></div><br />
</div><br />
</div><br />
<div class="left"><br />
<div data-type="label" data-device="AgroWeather" data-get="par04" data-substitution="toDate().eeee()+','"></div><br />
<div data-type="label" data-device="AgroWeather" data-get="par04" data-substitution="toDate().ddmm()"></div><br />
</div><br />
</syntaxhighlight><br />
<br />
;Haupt-Seite<br />
In der Haupt-Seite wird das Template dann für jede Slider-Seite eingebunden und das Reading für den jeweiligen Tag via Parameter übergeben.<br />
<syntaxhighlight lang="html"><br />
[...]<br />
<div data-type="swiper"><br />
<ul><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc0_tempMax","par02":"fc0_weatherDay","par03":"fc0_tempMin","par04":"fc0_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc1_tempMax","par02":"fc1_weatherDay","par03":"fc1_tempMin","par04":"fc1_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc2_tempMax","par02":"fc2_weatherDay","par03":"fc2_tempMin","par04":"fc2_date"}'></li><br />
<li data-template="templates/wetter.html" data-parameter='{"par01":"fc3_tempMax","par02":"fc3_weatherDay","par03":"fc3_tempMin","par04":"fc3_date"}'></li><br />
</ul><br />
</div><br />
[...]<br />
</syntaxhighlight><br />
<br />
== JavaScript-Funktionen ==<br />
Neben den Widgets können auch einige JavaScript-Funktionen verwendet werden, um Befehle an FHEM zu senden.<br />
<br />
<br />
Folgende Zeile setzt einen direkten Befehl an FHEM ab (<code>set dummy1 off</code>):<br />
<syntaxhighlight lang="html"><div onclick="ftui.setFhemStatus('set dummy1 off')">Dummy1 aus</div></syntaxhighlight><br />
<br />
<br />
Diese Zeile veranlasst FHEM dazu, eine Funktion aus der 99_myUtils.pm auszuführen (<code>myUtils_HeizungUpDown("WZ.Thermostat_Climate","up")</code>):<br />
<syntaxhighlight lang="html"><div onclick="ftui.setFhemStatus('{myUtils_HeizungUpDown(&quot;WZ.Thermostat_Climate&quot;,&quot;up&quot;)}')">+</div></syntaxhighlight><br />
<br />
<br />
Ein Beispiel, wie ein Kommando an FHEM gesendet wird und gleichzeitig der Wert eines bereits in FTUI angezeigten Readings verwendet werden kann:<br />
<syntaxhighlight lang="html"><br />
<div data-type="label" data-device="dummy1" data-get="temperature"></div><br />
<div onClick="ftui.setFhemStatus('set dummy2 '+ftui.getDeviceParameter('dummy1','temperature').val);">Senden</div><br />
</syntaxhighlight><br />
<br />
== Eigene Widgets erstellen ==<br />
Wie eigenen Widgets für FTUI erstellt werden können, ist auf der Seite [[FTUI eigene Widgets]] beschrieben.<br />
<br />
Eine Schritt für Schritt Anleitung für das erste eigene Widget gibts hier [[FTUI eigene Widgets - Beispiel]]<br />
<br />
== FAQ ==<br />
Häufig gestellte Fragen zum FHEM Tablet UI sind in der [[FHEM Tablet UI FAQ]] zusammengestellt.<br />
<br />
== Links ==<br />
* [https://github.com/knowthelist/fhem-tablet-ui Projekt auf Github]<br />
* {{Link2Forum|Topic=34233|LinkText=Forums-Beitrag}}<br />
* [[FTUI_Snippets|Snippets]]<br />
* [http://knowthelist.github.io/fhem/tablet/demo_widgets.html Live-Demos]<br />
* [https://waschto.eu/fhem-und-tabletui-livedemo/ FHEM und TabletUI Live-Demo]<br />
* {{Link2Forum|Topic=37378|LinkText=User-Demos}}<br />
* [https://github.com/ovibox/fhem-ftui-user-demos Download der User-Demo-Dateien]<br />
<br />
[[Kategorie:FHEM Tablet UI|!]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=FTUI_Widget_UWZ&diff=30462FTUI Widget UWZ2019-05-20T15:19:34Z<p>No Legend: Kleine Beispiel für data-detail hinzugefügt</p>
<hr />
<div>Das [[{{PAGENAME}}|Widget UWZ]] ist ein Widget für [[FHEM Tablet UI]], das die Warnungen der Unwetterzentrale in verschiedenen, einstellbaren Formen anzeigt.<br />
Voraussetzung dafür ist ein bereits definiertes Device vom Modul [[UWZ]] (Unwetterzentrale) im FHEM-System.<br />
<br />
==Attribute==<br />
{|class="wikitable"<br />
!Attribut<br />
!Beschreibung<br />
!Standard-Wert<br />
!Beispiel<br />
|-<br />
|'''data-device'''||das in FHEM angelegte Unwetterzentrale-Device||||<br />
|-<br />
|'''data-detail'''||anzuzeigende Optionen, siehe untenstehende Tabelle||Alle Optionen laut Tabelle||<br />
|-<br />
|'''data-imgsize'''||Größe des Warn-Icons||30||data-imgsize="50"<br />
|-<br />
|'''data-max'''||maximale Anzahl an Warnungen||10||data-max="5"<br />
|-<br />
|'''data-lngtxtstyle'''||Hier kann man den Schrift-Style für den Langtext (longText) anpassen<br>(zb big, bigger, small, ... was die UI so bietet). Oder einfach weg lassen...||||data-lngtxtstyle="small"<br />
|-<br />
|'''data-shttxtstyle'''||Hier kann man den Schrift-Style für den Kurztext (shortText) anpassen<br>(zb big, bigger, small, ... was die UI so bietet). Oder einfach weg lassen...||||data-lngtxtstyle="big"<br />
|-<br />
|'''data-swiperstyle'''||Ermöglicht, den Swiper zu benutzen. Oder einfach weg lassen...||no||data-swiperstyle="yes"<br />
|-<br />
|'''data-textdivider'''||Damit der Text für die Gültigkeitsdauer der Warnung nicht am bisher ausgegebenen Kurz- und/oder Langtext "klebt",<br>kann man hier einen HTML-Code eingeben,<br>um die Trennung (Abstand) zwischen Short-/LongText und der WarnTime zu gestalten. Oder einfach weg lassen||||data-textdivider="&lt;br&gt;&lt;br&gt;"<br />
|}<br />
<br />
== Anzeigeoptionen ==<br />
Die Anzeigeoptionen bestimmen, welche der Details im Widget angezeigt werden, die vom UWZ-Modul als Readings geliefert werden.<br><br />
Bei Problemen in der Anzeige ist es ratsam, sich für den Kurztext oder den Langtext zu entscheiden sowie nur eine der beiden Farbangaben "WarnUWZLevel_Color" oder "uwzLevel" zu verwenden.<br />
<br />
<br />
Beispiel:<br />
data-detail='["WarnUWZLevel_Color","ShortText"]'<br />
<br />
<br />
{|class="wikitable"<br />
! style="text-align:center"| Bezeichner<br />
! style="text-align:left"| Beschreibung<br />
|-<br />
|'''WarnUWZLevel_Color'''||Die Warnung wird in einem Kasten angezeigt, der die Warnfarbe der UWZ hat, die im Reading "WarnUWZLevel_Color" ausgelesen wird.<br />
|-<br />
|'''uwzLevel'''||Die Warnung wird in einem Kasten angezeigt, der die Warnfarbe der UWZ hat, die dem Reading "Warn_x_uwzLevel" ausgelesen wird.<br />
|-<br />
|'''IconURL'''||Das WarnIcon aus dem Reading "Warn_x_IconURL" wird mit angezeigt.<br />
|-<br />
|'''ShortText'''||Der Kurztext aus dem Reading "Warn_x_ShortText" wird mit angezeigt.<br />
|-<br />
|'''LongText'''||Der Langtext aus dem Reading "Warn_x_LongText" wird mit angezeigt.<br />
|-<br />
|'''WarnTime'''||Der Anzeige wird ein Satz für die Gültigkeitsdauer der Warnung mit Start- und Endezeit der Warnung hinzugefügt.<br>Hierzu muss das Attribut "humanreadable" im UWZ-Device auf 1 gesetzt sein!<br />
|}<br />
Die Angabe der Anzeigeoptionen ist in der Reihenfolge zu notieren, wie sie hier in der Tabelle von oben nach unten aufgeführt sind.<br />
<br />
== Beispiele ==<br />
(Wird noch ergänzt)<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=64334|LinkText=Forums-Beitrag}}<br />
<br />
[[Kategorie:FHEM Tablet UI|UWZ]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&diff=29384Homebridge einrichten2019-02-05T10:47:41Z<p>No Legend: </p>
<hr />
<div>Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge. <br />
<br />
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspbian getestet). Der Wiki-Eintrag bezieht sich hauptsächlich auf eine {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.<br />
<br />
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekit-Plugins ist in einem neuen {{Link2Forum|Topic= 48558 |LinkText=Thread im FHEM-Forum}} beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.<br />
<br />
Eine Sammlung funktionsfähiger Homebridge FHEM Konfigurationen kann hier gefunden werden: [[Homebridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.<br />
<br />
= Vorbereitung der Umgebung =<br />
<br />
== NodeJS installieren ==<br />
''Die nachfolgenden Befehle sind alle mit "sudo" prefixed. Wenn du unter "root" arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.''<br />
<br />
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
sudo apt-get install build-essential libssl-dev</syntaxhighlight><br />
<br />
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:<br />
<br />
'''NodeJS V4'''<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
{{Randnotiz|RNTyp=y|RNText=Bei Installation von NodeJS auf einem "alten" RasPi (B) bitte die besonderen Hinweise in {{Link2Forum|Topic=32652|Message=419325|LinkText=diesem Forenbeitrag}} beachten.}}<br />
'''NodeJS V5'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V6'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V11'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
<br />
Bei Ubunutu ist es noch nötig apt-get wie folgt auszuführen.<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
Damit ist NodeJS installiert.<br />
<br />
== Python, g++, MDNS installieren ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get install python g++ libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
Nun sind alle Voraussetzungen geschaffen.<br />
<br />
= Installation von Homebridge & notwendiger Shims =<br />
Im nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert. <br />
Eventuell muss vor die Befehle ein<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo<br />
</syntaxhighlight><br />
vorangestellt werden.<br />
== Homebridge installieren ==<br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm install -g --unsafe-perm homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm install -g homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
=== Fehler während der Installation ===<br />
Bei folgendem Fehler ist das Abrufen von Github nicht möglich.<br />
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror <br />
git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: <br />
github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen</pre><br />
Fehler könnte hier durch eine aktive Firewall verursacht werden.<br />
<br />
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install avahi-daemon<br />
</syntaxhighlight><br />
<br />
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, dass "dns_sd.h" nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
== Homebridge aktualisieren ==<br />
Prüfen, ob es Updates gibt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g outdated<br />
</syntaxhighlight><br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g update homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g update homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
Sollte dies nicht funktionieren, kann mit<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge<br />
</syntaxhighlight><br />
bzw. <br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge-fhem<br />
</syntaxhighlight><br />
das Update installiert werden.<br />
<br />
<br />
Um eine spezielle Version zu installieren, können die Installationsbefehle, von oben, wie folgt angepasst werden.<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge-fhem@0.4.5<br />
</syntaxhighlight><br />
<br />
<br />
= Homebridge konfigurieren =<br />
''Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizierten Nutzer für homebridge oder der Einfachheit halber den Nutzer, unter dem auch FHEM läuft (meist "fhem").''<br />
<br />
== Einstellungen für homebridge ==<br />
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
mkdir -p ~/.homebridge<br />
cd ~/.homebridge/<br />
</syntaxhighlight><br />
<br />
Nun muss darin noch die config.json erstellt bzw. angepasst werden:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
nano ~/.homebridge/config.json<br />
</syntaxhighlight><br />
<br />
Hinweise zur Konfiguration:<br />
* "''bridge''":<br />
** "''username''": Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.<br />
** "''port''": Sollte so belassen werden<br />
** "''pin''": Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.<br />
* "''platforms''": <br />
** "''platform''": Hier muss "FHEM" beibehalten werden.<br />
** "''server''": Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.<br />
** "''port''": Hier muss der Port des gewählten FHEMWEBs eingetragen werden (muss nicht das "normale" sein, kann eine extra Instanz sein)<br />
** "''auth''": Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.<br />
** "''filter''": Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
{<br />
"bridge": {<br />
"name": "Homebridge",<br />
"username": "CC:22:3D:E3:CE:30",<br />
"port": 51826,<br />
"pin": "031-45-154"<br />
},<br />
<br />
"platforms": [<br />
{<br />
"platform": "FHEM",<br />
"name": "FHEM",<br />
"server": "127.0.0.1",<br />
"port": "8083",<br />
"auth": {"user": "FhemUser", "pass": "XXX"},<br />
"filter": "room=Homekit"<br />
}<br />
],<br />
<br />
"accessories": []<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn für FHEMWEB kein user/password vergeben ist muss die "auth" Zeile weggelassen werden.<br />
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"ssl": true,<br />
</syntaxhighlight><br />
Wenn man SSL ohne user/password benutzt, muss man "auth" Zeile einfugen, wobei die Werte weggelassen werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"auth": {"user": "", "pass": ""},<br />
</syntaxhighlight><br />
<br />
Natürlich kann man auch nach beliebigen anderen Kriterien filtern. z.b. nach Device TYPE, nach subtype Attribut, ... Es können mehrere FHEM platforms Abschnitte mit eigenem Filter im config file stehen (dabei das Komma zwischen den einzelnen Abschnitten nicht vergessen!) . Auch Geräte auf die mehr als ein Filterausdruck matched werden dabei nur einmal hinzugefügt.<br />
<br />
= FHEM konfigurieren =<br />
Es empfiehlt sich ein siri Gerät in FHEM anzulegen.<br />
define siri siri<br />
<br />
Die benötigten Attribute werden inzwischen beim ersten Start von homebridge-fhem automatisch auf FHEM Seite eingetragen.<br />
<br />
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im {{Link2Forum|Topic= 48558 |LinkText=Diskussion im FHEM-Forum}}<br />
<br />
= Start von Homebridge =<br />
<br />
== Hinweis ==<br />
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.<br />
<br />
== Einmaliger Manueller Start ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
homebridge<br />
</syntaxhighlight><br />
<br />
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es sind dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitte nächsten Punkt beachten.<br />
<br />
=== Fehler während des Manuellen Starts ===<br />
Kommt ein Fehler der ähnlich aussieht wie folgender, sollte zuerst die Nodesversion geprüft werden.<br />
Die Nodes version kann durch ein System Update auf eine niedrigere Version wie benötigt gedowngraded werden<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
Error: Module version mismatch. Expected 47, got 46.<br />
at Error (native)<br />
at Object.Module._extensions..node (module.js:450:18)<br />
at Module.load (module.js:356:32)<br />
at Function.Module._load (module.js:313:12)<br />
at Module.require (module.js:366:17)<br />
at require (module.js:385:17)<br />
at Object.<anonymous> (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:24:20)<br />
at Module._compile (module.js:425:26)<br />
at Object.Module._extensions..js (module.js:432:10)<br />
at Module.load (module.js:356:32)<br />
</syntaxhighlight><br />
Geprüft werden kann die Nodes Version mit:<br />
<syntaxhighlight lang="bash" style="width=50%">node -v zeigt mir: v0.10.28, nodejs -v: v5.11.1</syntaxhighlight><br />
Hier ist die Version v0.10.28 wobei v0.12 Mindestvorraussetzung ist.<br />
Die Installation der richtigen Nodes Version kann oben am Anhang des Wiki Artikels entnommen werden.<br />
<br />
<br />
== Homebridge automatisch starten ==<br />
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.<br />
<br />
=== Steuerung via FHEM ===<br />
Auf Basis der unten stehenden ''Alternativen Methode'' wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite [[Homebridge Start und Status in FHEM]] im Detail beschrieben.<br />
<br />
=== Alternative Methode: Init-Skript ===<br />
Dies startet homebridge als einen Service.<br />
<br />
==== Service anlegen ====<br />
<code><br />
sudo nano /etc/init.d/homebridge<br />
</code><br />
<br />
Code einfügen (startet den Homebridge Server als Benutzer "pi" und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):<br />
<br />
<syntaxhighlight lang=bash><br />
#!/bin/sh<br />
### BEGIN INIT INFO<br />
# Provides: homebridge<br />
# Required-Start: $network $remote_fs $syslog<br />
# Required-Stop: $remote_fs $syslog<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: Start daemon at boot time for homebridge<br />
# Description: Enable service provided by daemon.<br />
### END INIT INFO<br />
export PATH=$PATH:/usr/local/bin<br />
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules<br />
PID=`pidof homebridge`<br />
case "$1" in<br />
start)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is already running"<br />
else<br />
su - pi -c "homebridge > /dev/null 2>&1 &"<br />
echo "Homebridge starting"<br />
$0 status<br />
fi<br />
;;<br />
stop)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is not running"<br />
else<br />
kill $PID<br />
echo "Homebridge closed"<br />
fi<br />
;;<br />
restart)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
$0 start<br />
else<br />
$0 stop<br />
$0 start<br />
fi<br />
;;<br />
status)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is running PID $PID"<br />
else<br />
echo "Homebridge is not running"<br />
fi<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop|status|restart}"<br />
exit 1<br />
;;<br />
esac<br />
exit 0<br />
</syntaxhighlight><br />
<br />
==== Autostart aktivieren ====<br />
<br />
<code><br />
sudo chmod 755 /etc/init.d/homebridge<br />
<br />
sudo update-rc.d homebridge defaults<br />
</code><br />
<br />
Nun kann man mit <br />
<br />
<code><br />
sudo service homebridge start<br />
</code><br />
<br />
bzw.<br />
<br />
<code><br />
sudo /etc/init.d/homebridge start<br />
</code><br />
<br />
den Dienst starten<br />
<br />
=== Alternative Methode: systemd ===<br />
<br />
Während das Init-Skript grundsätzlich auch mit systemd funktioniert, kann man natürlich für Homebridge auch ein systemd-Skript anlegen. Wie das geht, ist im [https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi#running-homebridge-on-bootup-systemd Wiki zu Homebridge] beschrieben.<br />
<br />
== FHEM Device Einstellungen ==<br />
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden, muss man sie im Raum Homekit hinzufügen.<br />
<br />
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device "Heizung"):<br />
# attr Heizung subtype thermostat<br />
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:<br />
# attr Dummy genericDeviceType switch<br />
# attr Dummy setList on off<br />
<br />
Wie bereits vorher angemerkt: fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.<br />
<br />
= HomeKit in iOS =<br />
<br />
== Einrichtung ==<br />
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden. <br />
<br />
Es gibt verschiedene Apps. Im Folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss.<br />
In der App auf:<br />
<pre style="width:50%;"><br />
Gerät hinzufügen<br />
</pre><br />
Es sollte ein Gerät mit der Bezeichnung "Homebridge" zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):<br />
<pre style="width:50%;"><br />
031-45-154<br />
</pre><br />
eingeben.<br />
<br />
Im Anschluss können die Devices nach Belieben verschiedenen Räumen zugeteilt werden, sowie Szenen und Bereiche erstellt werden.<br />
<br />
== Schalten mit Siri ==<br />
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:<br />
<pre style="width:50%;"><br />
"Schalte alle Lampen im Obergeschoss ein."<br />
"Schalte Chloes Licht aus."<br />
"Dimme das Licht in der Küche."<br />
"Dimme das Licht im Esszimmer auf 50 %."<br />
"Stelle das Licht in der Küche am hellsten ein."<br />
"Stelle die Temperatur im Tahoe-Haus auf 22 °C ein."<br />
"Stelle das Thermostat im Erdgeschoss auf 21 °C ein.<br />
"Schalte den Drucker im Büro ein."<br />
"Siri, bereite alles für eine Party vor."<br />
"Bereite das Ambiente fürs Abendessen vor."<br />
"Aktiviere den Nachtruhemodus."<br />
</pre><br />
<br />
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.<br />
<br />
= Hinweise =<br />
<br />
== Unterstützte Geräte ==<br />
Das FHEM Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt automatisch mindestens die folgenden Geräte:<br />
<br />
switches (devices with set on and set off commands)<br />
lights (devices with set on and set off commands)<br />
HomeMatic, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands)<br />
HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb)<br />
homematic, max and pid20 thermostats<br />
homematic, DUOFERN and FS20/IT(?) blinds<br />
homematic, MAX and FHTTK contact sensors (door, window)<br />
HM-SEC-WIN, HM-SEC-KEY<br />
presence, ROOMMATE<br />
SONOS (power, volume)<br />
harmony scenes<br />
temperaturecw and humidity sensors<br />
CO20 air quality sensor<br />
probably some more ...<br />
<br />
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit-Typen abbilden.<br />
<br />
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich [https://www.npmjs.com/package/homebridge-fhem auf den npmjs seiten] bzw. [https://github.com/justme-1968/homebridge-fhem auf github].<br />
<br />
Mehr zum homebridgeMapping findet sich hier: [[Alexa_und_Mappings#homebridgeMapping]]<br />
<br />
Mehr zu den unterstützen Services und Characteristics findet sich hier: [https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js]<br />
<br />
<br />
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:<br />
<syntaxhighlight><br />
clear<br />
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off<br />
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info<br />
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE<br />
ConfiguredName:model<br />
TelevisionSpeaker#Mute=mute<br />
Active:default=ACTIVE<br />
VolumeSelector:volume,cmds=0:VolumeUp;1:VolumeDown<br />
VolumeControlType:default=ABSOLUTE<br />
</syntaxhighlight><br />
<br />
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.<br />
<br />
== Zusätzliche Plugins ==<br />
Für manche der über FHEM steuerbaren Geräte wie z.b. MiLight, Harmony Hub, Philips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich, empfiehlt es sich aber diese '''nicht''' zu verwenden, sondern die Steuerung über die FHEM-Integration zu realisieren, da<br />
* diese in der Regel sehr viel mächtiger und frei konfigurierbar ist<br />
* es FHEM erlaubt, als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten, die gepollt werden) <br />
* die Ressourcen auf den angesteuerten Geräten schont, da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird<br />
<br />
== Hinweis für alte homebridge Versionen ==<br />
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut<br />
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:<br />
<pre><br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"<br />
</pre><br />
<br />
== Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI ==<br />
<br />
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen, auch diverse Abhängigkeiten aus der '''package.json''' zu entfernen:<br />
<pre><br />
"ad2usb": "git+https://github.com/alistairg/node-ad2usb.git#local",<br />
"carwingsjs": "0.0.x",<br />
"chokidar": "^1.0.5",<br />
"eibd": "^0.3.1",<br />
"elkington": "kevinohara80/elkington",<br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git",<br />
"lifx-api": "^1.0.1",<br />
"lifx": "git+https://github.com/magicmonkey/lifxjs.git",<br />
"node-hue-api": "^1.0.5",<br />
"node-icontrol": "^0.1.4",<br />
"node-milight-promise": "0.0.x",<br />
"tough-cookie": "^2.0.0",<br />
"sonos": "0.8.x",<br />
"telldus-live": "0.2.x",<br />
"teslams": "1.0.1",<br />
"unofficial-nest-api": "git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98",<br />
"wemo": "0.2.x",<br />
"wink-js": "0.0.5",<br />
"komponist" : "0.1.0",<br />
"yamaha-nodejs": "0.4.x",<br />
</pre><br />
<br />
Daher zunächst ein Backup der Datei anlegen <br />
<pre>sudo cp package.json package.json.bkp </pre><br />
Am einfachsten geht das Entfernen der Zeilen mit einem Editor, beispielsweise nano oder vi.<br />
<pre>sudo nano package.json</pre><br />
<br />
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.<br />
<syntaxhighlight lang="javascript"><br />
{<br />
"name": "homebridge",<br />
"description": "HomeKit support for the impatient",<br />
"version": "0.1.1",<br />
"scripts": {<br />
"start": "DEBUG=* node app.js || true"<br />
},<br />
"repository": {<br />
"type": "git",<br />
"url": "git://github.com/nfarina/homebridge.git"<br />
},<br />
"license": "ISC",<br />
"dependencies": {<br />
"async": "^1.4.2",<br />
"color": "0.10.x",<br />
"debug": "^2.2.0",<br />
"hap-nodejs": "^0.0.2",<br />
"isy-js": "",<br />
"mdns": "^2.2.4",<br />
"netatmo": "1.3.0",<br />
"node-cache": "3.0.0",<br />
"node-persist": "0.0.x",<br />
"node-xmpp-client": "1.0.0-alpha23",<br />
"q": "1.4.x",<br />
"queue": "^3.1.0",<br />
"request": "2.49.x",<br />
"xml2js": "0.4.x",<br />
"xmldoc": "0.1.x"<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
== Links ==<br />
* [https://github.com/nfarina/homebridge Github homebridge]<br />
* [https://github.com/justme-1968/homebridge-fhem Github homebridge-fhem]<br />
* [https://www.npmjs.com/package/homebridge NPM homebridge]<br />
* [https://www.npmjs.com/package/homebridge-fhem NPM homebridge-fhem]<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Sprachsteuerung]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&diff=29383Homebridge einrichten2019-02-05T05:56:24Z<p>No Legend: Hinweis Installation von Version hinzu.</p>
<hr />
<div>Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge. <br />
<br />
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspbian getestet). Der Wiki-Eintrag bezieht sich hauptsächlich auf eine {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.<br />
<br />
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekit-Plugins ist in einem neuen {{Link2Forum|Topic= 48558 |LinkText=Thread im FHEM-Forum}} beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.<br />
<br />
Eine Sammlung funktionsfähiger Homebridge FHEM Konfigurationen kann hier gefunden werden: [[Homebridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.<br />
<br />
= Vorbereitung der Umgebung =<br />
<br />
== NodeJS installieren ==<br />
''Die nachfolgenden Befehle sind alle mit "sudo" prefixed. Wenn du unter "root" arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.''<br />
<br />
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
sudo apt-get install build-essential libssl-dev</syntaxhighlight><br />
<br />
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:<br />
<br />
'''NodeJS V4'''<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
{{Randnotiz|RNTyp=y|RNText=Bei Installation von NodeJS auf einem "alten" RasPi (B) bitte die besonderen Hinweise in {{Link2Forum|Topic=32652|Message=419325|LinkText=diesem Forenbeitrag}} beachten.}}<br />
'''NodeJS V5'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V6'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V10'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
Damit ist NodeJS installiert.<br />
<br />
== Python, g++, MDNS installieren ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get install python g++ libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
Nun sind alle Voraussetzungen geschaffen.<br />
<br />
= Installation von Homebridge & notwendiger Shims =<br />
Im nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert. <br />
Eventuell muss vor die Befehle ein<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo<br />
</syntaxhighlight><br />
vorangestellt werden.<br />
== Homebridge installieren ==<br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm install -g --unsafe-perm homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm install -g homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
=== Fehler während der Installation ===<br />
Bei folgendem Fehler ist das Abrufen von Github nicht möglich.<br />
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror <br />
git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: <br />
github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen</pre><br />
Fehler könnte hier durch eine aktive Firewall verursacht werden.<br />
<br />
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install avahi-daemon<br />
</syntaxhighlight><br />
<br />
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, dass "dns_sd.h" nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
== Homebridge aktualisieren ==<br />
Prüfen, ob es Updates gibt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g outdated<br />
</syntaxhighlight><br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g update homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g update homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
Sollte dies nicht funktionieren, kann mit<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge<br />
</syntaxhighlight><br />
bzw. <br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge-fhem<br />
</syntaxhighlight><br />
das Update installiert werden.<br />
<br />
<br />
Um eine spezielle Version zu installieren, können die Installationsbefehle, von oben, wie folgt angepasst werden.<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge-fhem@0.4.5<br />
</syntaxhighlight><br />
<br />
<br />
= Homebridge konfigurieren =<br />
''Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizierten Nutzer für homebridge oder der Einfachheit halber den Nutzer, unter dem auch FHEM läuft (meist "fhem").''<br />
<br />
== Einstellungen für homebridge ==<br />
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
mkdir -p ~/.homebridge<br />
cd ~/.homebridge/<br />
</syntaxhighlight><br />
<br />
Nun muss darin noch die config.json erstellt bzw. angepasst werden:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
nano ~/.homebridge/config.json<br />
</syntaxhighlight><br />
<br />
Hinweise zur Konfiguration:<br />
* "''bridge''":<br />
** "''username''": Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.<br />
** "''port''": Sollte so belassen werden<br />
** "''pin''": Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.<br />
* "''platforms''": <br />
** "''platform''": Hier muss "FHEM" beibehalten werden.<br />
** "''server''": Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.<br />
** "''port''": Hier muss der Port des gewählten FHEMWEBs eingetragen werden (muss nicht das "normale" sein, kann eine extra Instanz sein)<br />
** "''auth''": Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.<br />
** "''filter''": Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
{<br />
"bridge": {<br />
"name": "Homebridge",<br />
"username": "CC:22:3D:E3:CE:30",<br />
"port": 51826,<br />
"pin": "031-45-154"<br />
},<br />
<br />
"platforms": [<br />
{<br />
"platform": "FHEM",<br />
"name": "FHEM",<br />
"server": "127.0.0.1",<br />
"port": "8083",<br />
"auth": {"user": "FhemUser", "pass": "XXX"},<br />
"filter": "room=Homekit"<br />
}<br />
],<br />
<br />
"accessories": []<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn für FHEMWEB kein user/password vergeben ist muss die "auth" Zeile weggelassen werden.<br />
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"ssl": true,<br />
</syntaxhighlight><br />
Wenn man SSL ohne user/password benutzt, muss man "auth" Zeile einfugen, wobei die Werte weggelassen werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"auth": {"user": "", "pass": ""},<br />
</syntaxhighlight><br />
<br />
Natürlich kann man auch nach beliebigen anderen Kriterien filtern. z.b. nach Device TYPE, nach subtype Attribut, ... Es können mehrere FHEM platforms Abschnitte mit eigenem Filter im config file stehen (dabei das Komma zwischen den einzelnen Abschnitten nicht vergessen!) . Auch Geräte auf die mehr als ein Filterausdruck matched werden dabei nur einmal hinzugefügt.<br />
<br />
= FHEM konfigurieren =<br />
Es empfiehlt sich ein siri Gerät in FHEM anzulegen.<br />
define siri siri<br />
<br />
Die benötigten Attribute werden inzwischen beim ersten Start von homebridge-fhem automatisch auf FHEM Seite eingetragen.<br />
<br />
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im {{Link2Forum|Topic= 48558 |LinkText=Diskussion im FHEM-Forum}}<br />
<br />
= Start von Homebridge =<br />
<br />
== Hinweis ==<br />
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.<br />
<br />
== Einmaliger Manueller Start ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
homebridge<br />
</syntaxhighlight><br />
<br />
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es sind dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitte nächsten Punkt beachten.<br />
<br />
=== Fehler während des Manuellen Starts ===<br />
Kommt ein Fehler der ähnlich aussieht wie folgender, sollte zuerst die Nodesversion geprüft werden.<br />
Die Nodes version kann durch ein System Update auf eine niedrigere Version wie benötigt gedowngraded werden<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
Error: Module version mismatch. Expected 47, got 46.<br />
at Error (native)<br />
at Object.Module._extensions..node (module.js:450:18)<br />
at Module.load (module.js:356:32)<br />
at Function.Module._load (module.js:313:12)<br />
at Module.require (module.js:366:17)<br />
at require (module.js:385:17)<br />
at Object.<anonymous> (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:24:20)<br />
at Module._compile (module.js:425:26)<br />
at Object.Module._extensions..js (module.js:432:10)<br />
at Module.load (module.js:356:32)<br />
</syntaxhighlight><br />
Geprüft werden kann die Nodes Version mit:<br />
<syntaxhighlight lang="bash" style="width=50%">node -v zeigt mir: v0.10.28, nodejs -v: v5.11.1</syntaxhighlight><br />
Hier ist die Version v0.10.28 wobei v0.12 Mindestvorraussetzung ist.<br />
Die Installation der richtigen Nodes Version kann oben am Anhang des Wiki Artikels entnommen werden.<br />
<br />
<br />
== Homebridge automatisch starten ==<br />
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.<br />
<br />
=== Steuerung via FHEM ===<br />
Auf Basis der unten stehenden ''Alternativen Methode'' wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite [[Homebridge Start und Status in FHEM]] im Detail beschrieben.<br />
<br />
=== Alternative Methode: Init-Skript ===<br />
Dies startet homebridge als einen Service.<br />
<br />
==== Service anlegen ====<br />
<code><br />
sudo nano /etc/init.d/homebridge<br />
</code><br />
<br />
Code einfügen (startet den Homebridge Server als Benutzer "pi" und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):<br />
<br />
<syntaxhighlight lang=bash><br />
#!/bin/sh<br />
### BEGIN INIT INFO<br />
# Provides: homebridge<br />
# Required-Start: $network $remote_fs $syslog<br />
# Required-Stop: $remote_fs $syslog<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: Start daemon at boot time for homebridge<br />
# Description: Enable service provided by daemon.<br />
### END INIT INFO<br />
export PATH=$PATH:/usr/local/bin<br />
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules<br />
PID=`pidof homebridge`<br />
case "$1" in<br />
start)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is already running"<br />
else<br />
su - pi -c "homebridge > /dev/null 2>&1 &"<br />
echo "Homebridge starting"<br />
$0 status<br />
fi<br />
;;<br />
stop)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is not running"<br />
else<br />
kill $PID<br />
echo "Homebridge closed"<br />
fi<br />
;;<br />
restart)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
$0 start<br />
else<br />
$0 stop<br />
$0 start<br />
fi<br />
;;<br />
status)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is running PID $PID"<br />
else<br />
echo "Homebridge is not running"<br />
fi<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop|status|restart}"<br />
exit 1<br />
;;<br />
esac<br />
exit 0<br />
</syntaxhighlight><br />
<br />
==== Autostart aktivieren ====<br />
<br />
<code><br />
sudo chmod 755 /etc/init.d/homebridge<br />
<br />
sudo update-rc.d homebridge defaults<br />
</code><br />
<br />
Nun kann man mit <br />
<br />
<code><br />
sudo service homebridge start<br />
</code><br />
<br />
bzw.<br />
<br />
<code><br />
sudo /etc/init.d/homebridge start<br />
</code><br />
<br />
den Dienst starten<br />
<br />
=== Alternative Methode: systemd ===<br />
<br />
Während das Init-Skript grundsätzlich auch mit systemd funktioniert, kann man natürlich für Homebridge auch ein systemd-Skript anlegen. Wie das geht, ist im [https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi#running-homebridge-on-bootup-systemd Wiki zu Homebridge] beschrieben.<br />
<br />
== FHEM Device Einstellungen ==<br />
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden, muss man sie im Raum Homekit hinzufügen.<br />
<br />
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device "Heizung"):<br />
# attr Heizung subtype thermostat<br />
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:<br />
# attr Dummy genericDeviceType switch<br />
# attr Dummy setList on off<br />
<br />
Wie bereits vorher angemerkt: fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.<br />
<br />
= HomeKit in iOS =<br />
<br />
== Einrichtung ==<br />
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden. <br />
<br />
Es gibt verschiedene Apps. Im Folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss.<br />
In der App auf:<br />
<pre style="width:50%;"><br />
Gerät hinzufügen<br />
</pre><br />
Es sollte ein Gerät mit der Bezeichnung "Homebridge" zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):<br />
<pre style="width:50%;"><br />
031-45-154<br />
</pre><br />
eingeben.<br />
<br />
Im Anschluss können die Devices nach Belieben verschiedenen Räumen zugeteilt werden, sowie Szenen und Bereiche erstellt werden.<br />
<br />
== Schalten mit Siri ==<br />
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:<br />
<pre style="width:50%;"><br />
"Schalte alle Lampen im Obergeschoss ein."<br />
"Schalte Chloes Licht aus."<br />
"Dimme das Licht in der Küche."<br />
"Dimme das Licht im Esszimmer auf 50 %."<br />
"Stelle das Licht in der Küche am hellsten ein."<br />
"Stelle die Temperatur im Tahoe-Haus auf 22 °C ein."<br />
"Stelle das Thermostat im Erdgeschoss auf 21 °C ein.<br />
"Schalte den Drucker im Büro ein."<br />
"Siri, bereite alles für eine Party vor."<br />
"Bereite das Ambiente fürs Abendessen vor."<br />
"Aktiviere den Nachtruhemodus."<br />
</pre><br />
<br />
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.<br />
<br />
= Hinweise =<br />
<br />
== Unterstützte Geräte ==<br />
Das FHEM Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt automatisch mindestens die folgenden Geräte:<br />
<br />
switches (devices with set on and set off commands)<br />
lights (devices with set on and set off commands)<br />
HomeMatic, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands)<br />
HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb)<br />
homematic, max and pid20 thermostats<br />
homematic, DUOFERN and FS20/IT(?) blinds<br />
homematic, MAX and FHTTK contact sensors (door, window)<br />
HM-SEC-WIN, HM-SEC-KEY<br />
presence, ROOMMATE<br />
SONOS (power, volume)<br />
harmony scenes<br />
temperaturecw and humidity sensors<br />
CO20 air quality sensor<br />
probably some more ...<br />
<br />
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit-Typen abbilden.<br />
<br />
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich [https://www.npmjs.com/package/homebridge-fhem auf den npmjs seiten] bzw. [https://github.com/justme-1968/homebridge-fhem auf github].<br />
<br />
Mehr zum homebridgeMapping findet sich hier: [[Alexa_und_Mappings#homebridgeMapping]]<br />
<br />
Mehr zu den unterstützen Services und Characteristics findet sich hier: [https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js]<br />
<br />
<br />
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:<br />
<syntaxhighlight><br />
clear<br />
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off<br />
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info<br />
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE<br />
ConfiguredName:model<br />
TelevisionSpeaker#Mute=mute<br />
Active:default=ACTIVE<br />
VolumeSelector:volume,cmds=0:VolumeUp;1:VolumeDown<br />
VolumeControlType:default=ABSOLUTE<br />
</syntaxhighlight><br />
<br />
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.<br />
<br />
== Zusätzliche Plugins ==<br />
Für manche der über FHEM steuerbaren Geräte wie z.b. MiLight, Harmony Hub, Philips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich, empfiehlt es sich aber diese '''nicht''' zu verwenden, sondern die Steuerung über die FHEM-Integration zu realisieren, da<br />
* diese in der Regel sehr viel mächtiger und frei konfigurierbar ist<br />
* es FHEM erlaubt, als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten, die gepollt werden) <br />
* die Ressourcen auf den angesteuerten Geräten schont, da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird<br />
<br />
== Hinweis für alte homebridge Versionen ==<br />
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut<br />
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:<br />
<pre><br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"<br />
</pre><br />
<br />
== Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI ==<br />
<br />
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen, auch diverse Abhängigkeiten aus der '''package.json''' zu entfernen:<br />
<pre><br />
"ad2usb": "git+https://github.com/alistairg/node-ad2usb.git#local",<br />
"carwingsjs": "0.0.x",<br />
"chokidar": "^1.0.5",<br />
"eibd": "^0.3.1",<br />
"elkington": "kevinohara80/elkington",<br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git",<br />
"lifx-api": "^1.0.1",<br />
"lifx": "git+https://github.com/magicmonkey/lifxjs.git",<br />
"node-hue-api": "^1.0.5",<br />
"node-icontrol": "^0.1.4",<br />
"node-milight-promise": "0.0.x",<br />
"tough-cookie": "^2.0.0",<br />
"sonos": "0.8.x",<br />
"telldus-live": "0.2.x",<br />
"teslams": "1.0.1",<br />
"unofficial-nest-api": "git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98",<br />
"wemo": "0.2.x",<br />
"wink-js": "0.0.5",<br />
"komponist" : "0.1.0",<br />
"yamaha-nodejs": "0.4.x",<br />
</pre><br />
<br />
Daher zunächst ein Backup der Datei anlegen <br />
<pre>sudo cp package.json package.json.bkp </pre><br />
Am einfachsten geht das Entfernen der Zeilen mit einem Editor, beispielsweise nano oder vi.<br />
<pre>sudo nano package.json</pre><br />
<br />
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.<br />
<syntaxhighlight lang="javascript"><br />
{<br />
"name": "homebridge",<br />
"description": "HomeKit support for the impatient",<br />
"version": "0.1.1",<br />
"scripts": {<br />
"start": "DEBUG=* node app.js || true"<br />
},<br />
"repository": {<br />
"type": "git",<br />
"url": "git://github.com/nfarina/homebridge.git"<br />
},<br />
"license": "ISC",<br />
"dependencies": {<br />
"async": "^1.4.2",<br />
"color": "0.10.x",<br />
"debug": "^2.2.0",<br />
"hap-nodejs": "^0.0.2",<br />
"isy-js": "",<br />
"mdns": "^2.2.4",<br />
"netatmo": "1.3.0",<br />
"node-cache": "3.0.0",<br />
"node-persist": "0.0.x",<br />
"node-xmpp-client": "1.0.0-alpha23",<br />
"q": "1.4.x",<br />
"queue": "^3.1.0",<br />
"request": "2.49.x",<br />
"xml2js": "0.4.x",<br />
"xmldoc": "0.1.x"<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
== Links ==<br />
* [https://github.com/nfarina/homebridge Github homebridge]<br />
* [https://github.com/justme-1968/homebridge-fhem Github homebridge-fhem]<br />
* [https://www.npmjs.com/package/homebridge NPM homebridge]<br />
* [https://www.npmjs.com/package/homebridge-fhem NPM homebridge-fhem]<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Sprachsteuerung]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&diff=29382Homebridge einrichten2019-02-05T05:52:29Z<p>No Legend: </p>
<hr />
<div>Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge. <br />
<br />
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspbian getestet). Der Wiki-Eintrag bezieht sich hauptsächlich auf eine {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.<br />
<br />
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekit-Plugins ist in einem neuen {{Link2Forum|Topic= 48558 |LinkText=Thread im FHEM-Forum}} beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.<br />
<br />
Eine Sammlung funktionsfähiger Homebridge FHEM Konfigurationen kann hier gefunden werden: [[Homebridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.<br />
<br />
= Vorbereitung der Umgebung =<br />
<br />
== NodeJS installieren ==<br />
''Die nachfolgenden Befehle sind alle mit "sudo" prefixed. Wenn du unter "root" arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.''<br />
<br />
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
sudo apt-get install build-essential libssl-dev</syntaxhighlight><br />
<br />
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:<br />
<br />
'''NodeJS V4'''<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
{{Randnotiz|RNTyp=y|RNText=Bei Installation von NodeJS auf einem "alten" RasPi (B) bitte die besonderen Hinweise in {{Link2Forum|Topic=32652|Message=419325|LinkText=diesem Forenbeitrag}} beachten.}}<br />
'''NodeJS V5'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V6'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
'''NodeJS V10'''<br />
<syntaxhighlight lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
Damit ist NodeJS installiert.<br />
<br />
== Python, g++, MDNS installieren ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get install python g++ libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
Nun sind alle Voraussetzungen geschaffen.<br />
<br />
= Installation von Homebridge & notwendiger Shims =<br />
Im nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert. <br />
Eventuell muss vor die Befehle ein<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo<br />
</syntaxhighlight><br />
vorangestellt werden.<br />
== Homebridge installieren ==<br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm install -g --unsafe-perm homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm install -g homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
=== Fehler während der Installation ===<br />
Bei folgendem Fehler ist das Abrufen von Github nicht möglich.<br />
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror <br />
git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: <br />
github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen</pre><br />
Fehler könnte hier durch eine aktive Firewall verursacht werden.<br />
<br />
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install avahi-daemon<br />
</syntaxhighlight><br />
<br />
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, dass "dns_sd.h" nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
sudo apt-get install libavahi-compat-libdnssd-dev<br />
</syntaxhighlight><br />
<br />
== Homebridge aktualisieren ==<br />
Prüfen, ob es Updates gibt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g outdated<br />
</syntaxhighlight><br />
Die aktuelle Homebridge version wird mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
npm -g update homebridge<br />
</syntaxhighlight><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g update homebridge-fhem<br />
</syntaxhighlight><br />
installiert.<br />
<br />
Sollte dies nicht funktionieren, kann mit<br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge<br />
</syntaxhighlight><br />
bzw. <br />
<syntaxhighlight lang="bash" style="width:60%;"><br />
npm -g install homebridge-fhem<br />
</syntaxhighlight><br />
das Update installiert werden.<br />
<br />
= Homebridge konfigurieren =<br />
''Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizierten Nutzer für homebridge oder der Einfachheit halber den Nutzer, unter dem auch FHEM läuft (meist "fhem").''<br />
<br />
== Einstellungen für homebridge ==<br />
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
mkdir -p ~/.homebridge<br />
cd ~/.homebridge/<br />
</syntaxhighlight><br />
<br />
Nun muss darin noch die config.json erstellt bzw. angepasst werden:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
nano ~/.homebridge/config.json<br />
</syntaxhighlight><br />
<br />
Hinweise zur Konfiguration:<br />
* "''bridge''":<br />
** "''username''": Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.<br />
** "''port''": Sollte so belassen werden<br />
** "''pin''": Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.<br />
* "''platforms''": <br />
** "''platform''": Hier muss "FHEM" beibehalten werden.<br />
** "''server''": Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.<br />
** "''port''": Hier muss der Port des gewählten FHEMWEBs eingetragen werden (muss nicht das "normale" sein, kann eine extra Instanz sein)<br />
** "''auth''": Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.<br />
** "''filter''": Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
{<br />
"bridge": {<br />
"name": "Homebridge",<br />
"username": "CC:22:3D:E3:CE:30",<br />
"port": 51826,<br />
"pin": "031-45-154"<br />
},<br />
<br />
"platforms": [<br />
{<br />
"platform": "FHEM",<br />
"name": "FHEM",<br />
"server": "127.0.0.1",<br />
"port": "8083",<br />
"auth": {"user": "FhemUser", "pass": "XXX"},<br />
"filter": "room=Homekit"<br />
}<br />
],<br />
<br />
"accessories": []<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn für FHEMWEB kein user/password vergeben ist muss die "auth" Zeile weggelassen werden.<br />
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"ssl": true,<br />
</syntaxhighlight><br />
Wenn man SSL ohne user/password benutzt, muss man "auth" Zeile einfugen, wobei die Werte weggelassen werden:<br />
<syntaxhighlight lang="javascript" style="width:50%;"><br />
"auth": {"user": "", "pass": ""},<br />
</syntaxhighlight><br />
<br />
Natürlich kann man auch nach beliebigen anderen Kriterien filtern. z.b. nach Device TYPE, nach subtype Attribut, ... Es können mehrere FHEM platforms Abschnitte mit eigenem Filter im config file stehen (dabei das Komma zwischen den einzelnen Abschnitten nicht vergessen!) . Auch Geräte auf die mehr als ein Filterausdruck matched werden dabei nur einmal hinzugefügt.<br />
<br />
= FHEM konfigurieren =<br />
Es empfiehlt sich ein siri Gerät in FHEM anzulegen.<br />
define siri siri<br />
<br />
Die benötigten Attribute werden inzwischen beim ersten Start von homebridge-fhem automatisch auf FHEM Seite eingetragen.<br />
<br />
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im {{Link2Forum|Topic= 48558 |LinkText=Diskussion im FHEM-Forum}}<br />
<br />
= Start von Homebridge =<br />
<br />
== Hinweis ==<br />
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.<br />
<br />
== Einmaliger Manueller Start ==<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
homebridge<br />
</syntaxhighlight><br />
<br />
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es sind dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitte nächsten Punkt beachten.<br />
<br />
=== Fehler während des Manuellen Starts ===<br />
Kommt ein Fehler der ähnlich aussieht wie folgender, sollte zuerst die Nodesversion geprüft werden.<br />
Die Nodes version kann durch ein System Update auf eine niedrigere Version wie benötigt gedowngraded werden<br />
<syntaxhighlight lang="bash" style="width=50%"><br />
Error: Module version mismatch. Expected 47, got 46.<br />
at Error (native)<br />
at Object.Module._extensions..node (module.js:450:18)<br />
at Module.load (module.js:356:32)<br />
at Function.Module._load (module.js:313:12)<br />
at Module.require (module.js:366:17)<br />
at require (module.js:385:17)<br />
at Object.<anonymous> (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:24:20)<br />
at Module._compile (module.js:425:26)<br />
at Object.Module._extensions..js (module.js:432:10)<br />
at Module.load (module.js:356:32)<br />
</syntaxhighlight><br />
Geprüft werden kann die Nodes Version mit:<br />
<syntaxhighlight lang="bash" style="width=50%">node -v zeigt mir: v0.10.28, nodejs -v: v5.11.1</syntaxhighlight><br />
Hier ist die Version v0.10.28 wobei v0.12 Mindestvorraussetzung ist.<br />
Die Installation der richtigen Nodes Version kann oben am Anhang des Wiki Artikels entnommen werden.<br />
<br />
<br />
== Homebridge automatisch starten ==<br />
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.<br />
<br />
=== Steuerung via FHEM ===<br />
Auf Basis der unten stehenden ''Alternativen Methode'' wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite [[Homebridge Start und Status in FHEM]] im Detail beschrieben.<br />
<br />
=== Alternative Methode: Init-Skript ===<br />
Dies startet homebridge als einen Service.<br />
<br />
==== Service anlegen ====<br />
<code><br />
sudo nano /etc/init.d/homebridge<br />
</code><br />
<br />
Code einfügen (startet den Homebridge Server als Benutzer "pi" und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):<br />
<br />
<syntaxhighlight lang=bash><br />
#!/bin/sh<br />
### BEGIN INIT INFO<br />
# Provides: homebridge<br />
# Required-Start: $network $remote_fs $syslog<br />
# Required-Stop: $remote_fs $syslog<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: Start daemon at boot time for homebridge<br />
# Description: Enable service provided by daemon.<br />
### END INIT INFO<br />
export PATH=$PATH:/usr/local/bin<br />
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules<br />
PID=`pidof homebridge`<br />
case "$1" in<br />
start)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is already running"<br />
else<br />
su - pi -c "homebridge > /dev/null 2>&1 &"<br />
echo "Homebridge starting"<br />
$0 status<br />
fi<br />
;;<br />
stop)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is not running"<br />
else<br />
kill $PID<br />
echo "Homebridge closed"<br />
fi<br />
;;<br />
restart)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
$0 start<br />
else<br />
$0 stop<br />
$0 start<br />
fi<br />
;;<br />
status)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is running PID $PID"<br />
else<br />
echo "Homebridge is not running"<br />
fi<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop|status|restart}"<br />
exit 1<br />
;;<br />
esac<br />
exit 0<br />
</syntaxhighlight><br />
<br />
==== Autostart aktivieren ====<br />
<br />
<code><br />
sudo chmod 755 /etc/init.d/homebridge<br />
<br />
sudo update-rc.d homebridge defaults<br />
</code><br />
<br />
Nun kann man mit <br />
<br />
<code><br />
sudo service homebridge start<br />
</code><br />
<br />
bzw.<br />
<br />
<code><br />
sudo /etc/init.d/homebridge start<br />
</code><br />
<br />
den Dienst starten<br />
<br />
=== Alternative Methode: systemd ===<br />
<br />
Während das Init-Skript grundsätzlich auch mit systemd funktioniert, kann man natürlich für Homebridge auch ein systemd-Skript anlegen. Wie das geht, ist im [https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi#running-homebridge-on-bootup-systemd Wiki zu Homebridge] beschrieben.<br />
<br />
== FHEM Device Einstellungen ==<br />
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden, muss man sie im Raum Homekit hinzufügen.<br />
<br />
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device "Heizung"):<br />
# attr Heizung subtype thermostat<br />
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:<br />
# attr Dummy genericDeviceType switch<br />
# attr Dummy setList on off<br />
<br />
Wie bereits vorher angemerkt: fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.<br />
<br />
= HomeKit in iOS =<br />
<br />
== Einrichtung ==<br />
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden. <br />
<br />
Es gibt verschiedene Apps. Im Folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss.<br />
In der App auf:<br />
<pre style="width:50%;"><br />
Gerät hinzufügen<br />
</pre><br />
Es sollte ein Gerät mit der Bezeichnung "Homebridge" zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):<br />
<pre style="width:50%;"><br />
031-45-154<br />
</pre><br />
eingeben.<br />
<br />
Im Anschluss können die Devices nach Belieben verschiedenen Räumen zugeteilt werden, sowie Szenen und Bereiche erstellt werden.<br />
<br />
== Schalten mit Siri ==<br />
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:<br />
<pre style="width:50%;"><br />
"Schalte alle Lampen im Obergeschoss ein."<br />
"Schalte Chloes Licht aus."<br />
"Dimme das Licht in der Küche."<br />
"Dimme das Licht im Esszimmer auf 50 %."<br />
"Stelle das Licht in der Küche am hellsten ein."<br />
"Stelle die Temperatur im Tahoe-Haus auf 22 °C ein."<br />
"Stelle das Thermostat im Erdgeschoss auf 21 °C ein.<br />
"Schalte den Drucker im Büro ein."<br />
"Siri, bereite alles für eine Party vor."<br />
"Bereite das Ambiente fürs Abendessen vor."<br />
"Aktiviere den Nachtruhemodus."<br />
</pre><br />
<br />
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.<br />
<br />
= Hinweise =<br />
<br />
== Unterstützte Geräte ==<br />
Das FHEM Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt automatisch mindestens die folgenden Geräte:<br />
<br />
switches (devices with set on and set off commands)<br />
lights (devices with set on and set off commands)<br />
HomeMatic, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands)<br />
HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb)<br />
homematic, max and pid20 thermostats<br />
homematic, DUOFERN and FS20/IT(?) blinds<br />
homematic, MAX and FHTTK contact sensors (door, window)<br />
HM-SEC-WIN, HM-SEC-KEY<br />
presence, ROOMMATE<br />
SONOS (power, volume)<br />
harmony scenes<br />
temperaturecw and humidity sensors<br />
CO20 air quality sensor<br />
probably some more ...<br />
<br />
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit-Typen abbilden.<br />
<br />
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich [https://www.npmjs.com/package/homebridge-fhem auf den npmjs seiten] bzw. [https://github.com/justme-1968/homebridge-fhem auf github].<br />
<br />
Mehr zum homebridgeMapping findet sich hier: [[Alexa_und_Mappings#homebridgeMapping]]<br />
<br />
Mehr zu den unterstützen Services und Characteristics findet sich hier: [https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js]<br />
<br />
<br />
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:<br />
<syntaxhighlight><br />
clear<br />
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off<br />
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info<br />
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE<br />
ConfiguredName:model<br />
TelevisionSpeaker#Mute=mute<br />
Active:default=ACTIVE<br />
VolumeSelector:volume,cmds=0:VolumeUp;1:VolumeDown<br />
VolumeControlType:default=ABSOLUTE<br />
</syntaxhighlight><br />
<br />
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.<br />
<br />
== Zusätzliche Plugins ==<br />
Für manche der über FHEM steuerbaren Geräte wie z.b. MiLight, Harmony Hub, Philips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich, empfiehlt es sich aber diese '''nicht''' zu verwenden, sondern die Steuerung über die FHEM-Integration zu realisieren, da<br />
* diese in der Regel sehr viel mächtiger und frei konfigurierbar ist<br />
* es FHEM erlaubt, als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten, die gepollt werden) <br />
* die Ressourcen auf den angesteuerten Geräten schont, da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird<br />
<br />
== Hinweis für alte homebridge Versionen ==<br />
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut<br />
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:<br />
<pre><br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"<br />
</pre><br />
<br />
== Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI ==<br />
<br />
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen, auch diverse Abhängigkeiten aus der '''package.json''' zu entfernen:<br />
<pre><br />
"ad2usb": "git+https://github.com/alistairg/node-ad2usb.git#local",<br />
"carwingsjs": "0.0.x",<br />
"chokidar": "^1.0.5",<br />
"eibd": "^0.3.1",<br />
"elkington": "kevinohara80/elkington",<br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git",<br />
"lifx-api": "^1.0.1",<br />
"lifx": "git+https://github.com/magicmonkey/lifxjs.git",<br />
"node-hue-api": "^1.0.5",<br />
"node-icontrol": "^0.1.4",<br />
"node-milight-promise": "0.0.x",<br />
"tough-cookie": "^2.0.0",<br />
"sonos": "0.8.x",<br />
"telldus-live": "0.2.x",<br />
"teslams": "1.0.1",<br />
"unofficial-nest-api": "git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98",<br />
"wemo": "0.2.x",<br />
"wink-js": "0.0.5",<br />
"komponist" : "0.1.0",<br />
"yamaha-nodejs": "0.4.x",<br />
</pre><br />
<br />
Daher zunächst ein Backup der Datei anlegen <br />
<pre>sudo cp package.json package.json.bkp </pre><br />
Am einfachsten geht das Entfernen der Zeilen mit einem Editor, beispielsweise nano oder vi.<br />
<pre>sudo nano package.json</pre><br />
<br />
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.<br />
<syntaxhighlight lang="javascript"><br />
{<br />
"name": "homebridge",<br />
"description": "HomeKit support for the impatient",<br />
"version": "0.1.1",<br />
"scripts": {<br />
"start": "DEBUG=* node app.js || true"<br />
},<br />
"repository": {<br />
"type": "git",<br />
"url": "git://github.com/nfarina/homebridge.git"<br />
},<br />
"license": "ISC",<br />
"dependencies": {<br />
"async": "^1.4.2",<br />
"color": "0.10.x",<br />
"debug": "^2.2.0",<br />
"hap-nodejs": "^0.0.2",<br />
"isy-js": "",<br />
"mdns": "^2.2.4",<br />
"netatmo": "1.3.0",<br />
"node-cache": "3.0.0",<br />
"node-persist": "0.0.x",<br />
"node-xmpp-client": "1.0.0-alpha23",<br />
"q": "1.4.x",<br />
"queue": "^3.1.0",<br />
"request": "2.49.x",<br />
"xml2js": "0.4.x",<br />
"xmldoc": "0.1.x"<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
== Links ==<br />
* [https://github.com/nfarina/homebridge Github homebridge]<br />
* [https://github.com/justme-1968/homebridge-fhem Github homebridge-fhem]<br />
* [https://www.npmjs.com/package/homebridge NPM homebridge]<br />
* [https://www.npmjs.com/package/homebridge-fhem NPM homebridge-fhem]<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Sprachsteuerung]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=ElectricityCalculator&diff=29309ElectricityCalculator2019-01-30T06:35:00Z<p>No Legend: /* Features / Funktionen */ Hinweis für IR Lesekopf und Text für GasCalculator hinzu</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Berechnung der Energiekosten<br />
|ModType=h<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=57106<br />
|ModTechName=73_ElectricityCalculator.pm<br />
|ModOwner={{Link2FU|4705|Sailor}}<br />
}}<br />
[[ElectricityCalculator]] ist ein Modul zur Berechnung von Energiemengen.<br />
<br />
== Features / Funktionen ==<br />
Die Haupteigenschaft des ElectricityCalculator Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter). <br />
<br />
Für Gas gibt es nun ein eigene Modul, den GasCaculator.<br />
<br />
Das Modul als solches ist kein Zählermodul, sondern nur eine Berechnungsinstanz, die einen eigenen fhem Zähler bzw. Wert aus dem DS2343 erfordert. commandref:" It is not a counter module itself but it requires"<br />
<br />
Somit gibt es zwei grundlegende Möglichkeiten<br />
* Direkter Anschluss an einen GPIO, um eine aktive Impulsverarbeitung zu nutzen (Zählerinstanz liegt auf dem GPIO)<br />
* Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter (Zählerinstanz liegt im DS2343)<br />
* IR Lesekopf eingebunden über OBIS Modul<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
=== Direkter Betrieb ===<br />
Für den direkten Betrieb benötigt man einen Stromzähler der in der Lage ist, die Zählimpulse abzugeben.<br />
Als Beispiel sei hierbei der Drehstromzähler eltako DSZ12E-80 erwähnt, der mittels Impulsen zu jedem Watt den Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh = 0,001kWh)<br />
<br />
Diese Impulse müssen dann zunächst importiert werden. In diesem Beispiel verwenden wir den Raspberry Pi auf dem auch das fhem System betrieben wird.<br />
Da der GPIO an einem PI jedoch die Spannung von 3,3 V nicht übersteigen darf, gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen.<br />
Dies bedeutet, das man die Impulse erst mittels einer externen Schaltung (Spannungsteiler) wandeln muss.<BR><br />
[[Datei:GPIO.png|mini|Anschlussbelegung / Schaltung]]<br />
Anschließend werden diese Impulse mittels des Moduls RPI_GPIO in fhem eingebunden.<br />
(Notwendiges Modul: RPI_GPIO)<br />
<BR><br />
<BR><br />
'''''Definition des GPIOs :'''''<br />
<pre>defmod GPIO26 RPI_GPIO 26<br />
attr GPIO26 active_low no<br />
attr GPIO26 direction Input<br />
attr GPIO26 event-on-change-reading .*<br />
attr GPIO26 event-on-update-reading .*<br />
attr GPIO26 interrupt falling<br />
</pre><br />
Wichtig sind hierbei die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Indirekter Betrieb ===<br />
Wenn der Stromzähler sich nicht in direkter Nähe zum fhem - System befindet, bleibt einem nur die Möglichkeit einen externen Zähler per Funkt oder LAN/WLAN dazwischenzuschalten.<br />
Als Lösung kann hierbei der Homematic HM-ES-TX-WM zum Einsatz kommen. Siehe [[HM-ES-TX-WM Zählersensor für Strom- und Gaszähler|HM-ES-TX-WM Zählersensor für Strom- und Gaszähler]].<br />
<BR><br />
Auch bei dessen Definition ist auf die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" zu achten, da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Allgemeine Moduldefinition ===<br />
:<code>defmod MEINZAEHLER ElectricityCalculator REGEXP</code><br />
:<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*</code><br />
(bei mir funktioniert auch GPIO26.*)<br />
<br />
<br />
<br />
Sollte es Readings geben, welche auch mit GPIO26.Counter beginnen, sollte auf ein genaues Reading verwiesen werden.<br />
<br />
Beispiel GPIO26.Counter und GPIO26.Counter2<br />
<br />
In diesem Fall würde der Energy Counter für beide Readings für die Callculation nutzen.<br />
<br />
Somit wären eine Menge Readings angelegt, welche Falsch sind.<br />
<br />
Um dem Modul nun zu sagen, welchen Werte er genau nutzen soll, im Beispiel wollen wir GPIO26.Counter nehmen,<br />
<br />
muss das Define wie folgt aussehen.<br />
<br />
Unterscheid ist hier der : (Doppelpunkt), somit wird nur genau das GPIO26.Counter Device für die Berechnung herangezogen.<br />
<br />
<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter:.*</code><br />
<br />
<br />
<br />
<br />
<br />
Sofern das Modul korrekt angelegt wurde, sollte man die Attribute (attr)<br />
* BasicPricePerAnnum<br />
* Currency <br />
* ElectricityKwhPerCounts<br />
* ElectricityPricePerKWh<br />
* MonthlyPayment<br />
<br />
setzen, damit die Berechnung korrekt durchgeführt werden kann.<br />
<br />
Zusätzlich kann man vermeiden, dass man bis zu 12 Monate warten muss, bis alle Werte in den Readings korrekt sind, diese Readings manuell setzen:<br />
<br />
<DestinationDevice>_<SourceCounterReading>_CounterDay1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMonth1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterYear1st und<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMeter1st<BR><br />
<BR><br />
<br />
<code>setreading <Device> <Reading> <WERT></code><br />
<br />
<br />
Beispiel:<br />
<br />
<code>setreading <Device> <DestinationDevice>_<SourceCounterReading>_CounterDay1st 12506142</code><br />
<br />
== Attribute ==<br />
<br />
Damit die Berechnung überhaupt durchgeführt werden kann, müssen dem Modul noch einige Daten angegeben werden.<br />
<br />
Ein Übersicht erhält man in der commandref.<br />
<br />
===Hinweis===<br />
Das Attribut <code>MonthOfAnnualReading</code> gibt an wann der Zähler abgelesen wird.<br />
<br />
Sollte nun am 31.12 der Zählerstand für die Abbrechnung genutzt werden, so ist im Attribute der Monat 1 einzutragen.<br />
<br />
Wird nun am 31.4 abgelesen, so ist im Attribute der Monat 5 einzutragen.<br />
<br />
<br />
== Bekannte Probleme ==<br />
Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.<br />
<br />
Sofern dem Modul keine initialen Werte mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die Readings des Moduls angelegt werden (siehe device specific help bzw. commandref).<br />
<br />
== Weblinks ==<br />
* [https://forum.fhem.de/index.php/topic,57106.0.html Diskussionsthread zum Modul]<br />
* [https://www.eltako.com/fileadmin/downloads/de/Prospekte/Drehstrom-und-Wechselstromzaehler-Katalog_high-res.pdf Drehstromzähler eltako mit S0 Ausgang]<br />
<br />
Mit nachfolgendem Produkt ist Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!<br />
* [https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter DualCounter von tm3d.de mit Anschluss am USB <> 1Wire]<br />
* [https://wiki.fhem.de/wiki/Interfaces_für_1-Wire 1 Wire Interfacesammlung]<br />
* [https://www.amazon.de/MOD-36-Z-USB-1-wire-converter-DS2480B-FT231XS/dp/B01BTV52YC/ref=sr_1_fkmr1_2?ie=UTF8&qid=1538745242&sr=8-2-fkmr1&keywords=1wire+USB+master Bezugsquelle 1 Wire USB-Bus Master ]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=ElectricityCalculator&diff=29308ElectricityCalculator2019-01-30T06:31:45Z<p>No Legend: Abschnitt Attribute hinzu</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Berechnung der Energiekosten<br />
|ModType=h<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=57106<br />
|ModTechName=73_ElectricityCalculator.pm<br />
|ModOwner={{Link2FU|4705|Sailor}}<br />
}}<br />
[[ElectricityCalculator]] ist ein Modul zur Berechnung von Energiemengen.<br />
<br />
== Features / Funktionen ==<br />
Die Haupteigenschaft des ElectricityCalculator Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter). <br />
Das Modul als solches ist kein Zählermodul, sondern nur eine Berechnungsinstanz, die einen eigenen fhem Zähler bzw. Wert aus dem DS2343 erfordert. commandref:" It is not a counter module itself but it requires"<br />
<br />
Somit gibt es zwei grundlegende Möglichkeiten<br />
* Direkter Anschluss an einen GPIO, um eine aktive Impulsverarbeitung zu nutzen (Zählerinstanz liegt auf dem GPIO)<br />
* Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter (Zählerinstanz liegt im DS2343)<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
=== Direkter Betrieb ===<br />
Für den direkten Betrieb benötigt man einen Stromzähler der in der Lage ist, die Zählimpulse abzugeben.<br />
Als Beispiel sei hierbei der Drehstromzähler eltako DSZ12E-80 erwähnt, der mittels Impulsen zu jedem Watt den Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh = 0,001kWh)<br />
<br />
Diese Impulse müssen dann zunächst importiert werden. In diesem Beispiel verwenden wir den Raspberry Pi auf dem auch das fhem System betrieben wird.<br />
Da der GPIO an einem PI jedoch die Spannung von 3,3 V nicht übersteigen darf, gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen.<br />
Dies bedeutet, das man die Impulse erst mittels einer externen Schaltung (Spannungsteiler) wandeln muss.<BR><br />
[[Datei:GPIO.png|mini|Anschlussbelegung / Schaltung]]<br />
Anschließend werden diese Impulse mittels des Moduls RPI_GPIO in fhem eingebunden.<br />
(Notwendiges Modul: RPI_GPIO)<br />
<BR><br />
<BR><br />
'''''Definition des GPIOs :'''''<br />
<pre>defmod GPIO26 RPI_GPIO 26<br />
attr GPIO26 active_low no<br />
attr GPIO26 direction Input<br />
attr GPIO26 event-on-change-reading .*<br />
attr GPIO26 event-on-update-reading .*<br />
attr GPIO26 interrupt falling<br />
</pre><br />
Wichtig sind hierbei die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Indirekter Betrieb ===<br />
Wenn der Stromzähler sich nicht in direkter Nähe zum fhem - System befindet, bleibt einem nur die Möglichkeit einen externen Zähler per Funkt oder LAN/WLAN dazwischenzuschalten.<br />
Als Lösung kann hierbei der Homematic HM-ES-TX-WM zum Einsatz kommen. Siehe [[HM-ES-TX-WM Zählersensor für Strom- und Gaszähler|HM-ES-TX-WM Zählersensor für Strom- und Gaszähler]].<br />
<BR><br />
Auch bei dessen Definition ist auf die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" zu achten, da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Allgemeine Moduldefinition ===<br />
:<code>defmod MEINZAEHLER ElectricityCalculator REGEXP</code><br />
:<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*</code><br />
(bei mir funktioniert auch GPIO26.*)<br />
<br />
<br />
<br />
Sollte es Readings geben, welche auch mit GPIO26.Counter beginnen, sollte auf ein genaues Reading verwiesen werden.<br />
<br />
Beispiel GPIO26.Counter und GPIO26.Counter2<br />
<br />
In diesem Fall würde der Energy Counter für beide Readings für die Callculation nutzen.<br />
<br />
Somit wären eine Menge Readings angelegt, welche Falsch sind.<br />
<br />
Um dem Modul nun zu sagen, welchen Werte er genau nutzen soll, im Beispiel wollen wir GPIO26.Counter nehmen,<br />
<br />
muss das Define wie folgt aussehen.<br />
<br />
Unterscheid ist hier der : (Doppelpunkt), somit wird nur genau das GPIO26.Counter Device für die Berechnung herangezogen.<br />
<br />
<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter:.*</code><br />
<br />
<br />
<br />
<br />
<br />
Sofern das Modul korrekt angelegt wurde, sollte man die Attribute (attr)<br />
* BasicPricePerAnnum<br />
* Currency <br />
* ElectricityKwhPerCounts<br />
* ElectricityPricePerKWh<br />
* MonthlyPayment<br />
<br />
setzen, damit die Berechnung korrekt durchgeführt werden kann.<br />
<br />
Zusätzlich kann man vermeiden, dass man bis zu 12 Monate warten muss, bis alle Werte in den Readings korrekt sind, diese Readings manuell setzen:<br />
<br />
<DestinationDevice>_<SourceCounterReading>_CounterDay1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMonth1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterYear1st und<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMeter1st<BR><br />
<BR><br />
<br />
<code>setreading <Device> <Reading> <WERT></code><br />
<br />
<br />
Beispiel:<br />
<br />
<code>setreading <Device> <DestinationDevice>_<SourceCounterReading>_CounterDay1st 12506142</code><br />
<br />
== Attribute ==<br />
<br />
Damit die Berechnung überhaupt durchgeführt werden kann, müssen dem Modul noch einige Daten angegeben werden.<br />
<br />
Ein Übersicht erhält man in der commandref.<br />
<br />
===Hinweis===<br />
Das Attribut <code>MonthOfAnnualReading</code> gibt an wann der Zähler abgelesen wird.<br />
<br />
Sollte nun am 31.12 der Zählerstand für die Abbrechnung genutzt werden, so ist im Attribute der Monat 1 einzutragen.<br />
<br />
Wird nun am 31.4 abgelesen, so ist im Attribute der Monat 5 einzutragen.<br />
<br />
<br />
== Bekannte Probleme ==<br />
Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.<br />
<br />
Sofern dem Modul keine initialen Werte mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die Readings des Moduls angelegt werden (siehe device specific help bzw. commandref).<br />
<br />
== Weblinks ==<br />
* [https://forum.fhem.de/index.php/topic,57106.0.html Diskussionsthread zum Modul]<br />
* [https://www.eltako.com/fileadmin/downloads/de/Prospekte/Drehstrom-und-Wechselstromzaehler-Katalog_high-res.pdf Drehstromzähler eltako mit S0 Ausgang]<br />
<br />
Mit nachfolgendem Produkt ist Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!<br />
* [https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter DualCounter von tm3d.de mit Anschluss am USB <> 1Wire]<br />
* [https://wiki.fhem.de/wiki/Interfaces_für_1-Wire 1 Wire Interfacesammlung]<br />
* [https://www.amazon.de/MOD-36-Z-USB-1-wire-converter-DS2480B-FT231XS/dp/B01BTV52YC/ref=sr_1_fkmr1_2?ie=UTF8&qid=1538745242&sr=8-2-fkmr1&keywords=1wire+USB+master Bezugsquelle 1 Wire USB-Bus Master ]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=ElectricityCalculator&diff=29307ElectricityCalculator2019-01-30T06:22:55Z<p>No Legend: /* Allgemeine Moduldefinition */ Definition ergänzt, Beispiele hinzu</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Berechnung der Energiekosten<br />
|ModType=h<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=57106<br />
|ModTechName=73_ElectricityCalculator.pm<br />
|ModOwner={{Link2FU|4705|Sailor}}<br />
}}<br />
[[ElectricityCalculator]] ist ein Modul zur Berechnung von Energiemengen.<br />
<br />
== Features / Funktionen ==<br />
Die Haupteigenschaft des ElectricityCalculator Moduls ist die Verbrauchsberechnung an Energie für Strom bzw. Gas auf der Basis eines Zählwertes (counter). <br />
Das Modul als solches ist kein Zählermodul, sondern nur eine Berechnungsinstanz, die einen eigenen fhem Zähler bzw. Wert aus dem DS2343 erfordert. commandref:" It is not a counter module itself but it requires"<br />
<br />
Somit gibt es zwei grundlegende Möglichkeiten<br />
* Direkter Anschluss an einen GPIO, um eine aktive Impulsverarbeitung zu nutzen (Zählerinstanz liegt auf dem GPIO)<br />
* Indirekter Anschluss über z.B. einen USB <> 1Wire Adapter < DS2343 Counter (Zählerinstanz liegt im DS2343)<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
=== Direkter Betrieb ===<br />
Für den direkten Betrieb benötigt man einen Stromzähler der in der Lage ist, die Zählimpulse abzugeben.<br />
Als Beispiel sei hierbei der Drehstromzähler eltako DSZ12E-80 erwähnt, der mittels Impulsen zu jedem Watt den Counter an einem GPIO entsprechend über dieses Event informiert. (1 Impuls = 1Wh = 0,001kWh)<br />
<br />
Diese Impulse müssen dann zunächst importiert werden. In diesem Beispiel verwenden wir den Raspberry Pi auf dem auch das fhem System betrieben wird.<br />
Da der GPIO an einem PI jedoch die Spannung von 3,3 V nicht übersteigen darf, gibt es mit den meisten S0 Bus Zählern ein Problem, da diese eine höhere Spannung zur Impulsbildung benötigen.<br />
Dies bedeutet, das man die Impulse erst mittels einer externen Schaltung (Spannungsteiler) wandeln muss.<BR><br />
[[Datei:GPIO.png|mini|Anschlussbelegung / Schaltung]]<br />
Anschließend werden diese Impulse mittels des Moduls RPI_GPIO in fhem eingebunden.<br />
(Notwendiges Modul: RPI_GPIO)<br />
<BR><br />
<BR><br />
'''''Definition des GPIOs :'''''<br />
<pre>defmod GPIO26 RPI_GPIO 26<br />
attr GPIO26 active_low no<br />
attr GPIO26 direction Input<br />
attr GPIO26 event-on-change-reading .*<br />
attr GPIO26 event-on-update-reading .*<br />
attr GPIO26 interrupt falling<br />
</pre><br />
Wichtig sind hierbei die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Indirekter Betrieb ===<br />
Wenn der Stromzähler sich nicht in direkter Nähe zum fhem - System befindet, bleibt einem nur die Möglichkeit einen externen Zähler per Funkt oder LAN/WLAN dazwischenzuschalten.<br />
Als Lösung kann hierbei der Homematic HM-ES-TX-WM zum Einsatz kommen. Siehe [[HM-ES-TX-WM Zählersensor für Strom- und Gaszähler|HM-ES-TX-WM Zählersensor für Strom- und Gaszähler]].<br />
<BR><br />
Auch bei dessen Definition ist auf die Attribute "event-on-update-reading .*" sowie "event-on-change-reading .*" zu achten, da ansonsten das ElectricityCalculator - Modul nicht reagiert.<br />
<br />
=== Allgemeine Moduldefinition ===<br />
:<code>defmod MEINZAEHLER ElectricityCalculator REGEXP</code><br />
:<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter.*</code><br />
(bei mir funktioniert auch GPIO26.*)<br />
<br />
<br />
<br />
Sollte es Readings geben, welche auch mit GPIO26.Counter beginnen, sollte auf ein genaues Reading verwiesen werden.<br />
<br />
Beispiel GPIO26.Counter und GPIO26.Counter2<br />
<br />
In diesem Fall würde der Energy Counter für beide Readings für die Callculation nutzen.<br />
<br />
Somit wären eine Menge Readings angelegt, welche Falsch sind.<br />
<br />
Um dem Modul nun zu sagen, welchen Werte er genau nutzen soll, im Beispiel wollen wir GPIO26.Counter nehmen,<br />
<br />
muss das Define wie folgt aussehen.<br />
<br />
Unterscheid ist hier der : (Doppelpunkt), somit wird nur genau das GPIO26.Counter Device für die Berechnung herangezogen.<br />
:<code>defmod WPVerbrauch ElectricityCalculator GPIO26.Counter:.*</code><br />
<br />
<br />
<br />
<br />
<br />
Sofern das Modul korrekt angelegt wurde, sollte man die Attribute (attr)<br />
* BasicPricePerAnnum<br />
* Currency <br />
* ElectricityKwhPerCounts<br />
* ElectricityPricePerKWh<br />
* MonthlyPayment<br />
<br />
setzen, damit die Berechnung korrekt durchgeführt werden kann.<br />
<br />
Zusätzlich kann man vermeiden, dass man bis zu 12 Monate warten muss, bis alle Werte in den Readings korrekt sind, diese Readings manuell setzen:<br />
<br />
<DestinationDevice>_<SourceCounterReading>_CounterDay1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMonth1st,<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterYear1st und<BR><br />
<DestinationDevice>_<SourceCounterReading>_CounterMeter1st<BR><br />
<BR><br />
setreading <Device> <Reading> <WERT><br />
<br />
Beispiel:<br />
<br />
setreading <Device> <DestinationDevice>_<SourceCounterReading>_CounterDay1st 12506142<br />
<br />
== Bekannte Probleme ==<br />
Die Readings des Counters sind bei der Verarbeitung fundamental. Sollten diese nicht korrekt definiert bzw. übergeben werden, kann das Modul keine Berechnungen durchführen.<br />
<br />
Sofern dem Modul keine initialen Werte mittels set Befehl übergeben werden, kann es vorkommen, dass erst nach einem Tageswechsel die Daten berechnet werden und die Readings des Moduls angelegt werden (siehe device specific help bzw. commandref).<br />
<br />
== Weblinks ==<br />
* [https://forum.fhem.de/index.php/topic,57106.0.html Diskussionsthread zum Modul]<br />
* [https://www.eltako.com/fileadmin/downloads/de/Prospekte/Drehstrom-und-Wechselstromzaehler-Katalog_high-res.pdf Drehstromzähler eltako mit S0 Ausgang]<br />
<br />
Mit nachfolgendem Produkt ist Vorsicht geboten, denn es handelt sich nicht um den DALLAS 1 Wire Standard!<br />
* [https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter DualCounter von tm3d.de mit Anschluss am USB <> 1Wire]<br />
* [https://wiki.fhem.de/wiki/Interfaces_für_1-Wire 1 Wire Interfacesammlung]<br />
* [https://www.amazon.de/MOD-36-Z-USB-1-wire-converter-DS2480B-FT231XS/dp/B01BTV52YC/ref=sr_1_fkmr1_2?ie=UTF8&qid=1538745242&sr=8-2-fkmr1&keywords=1wire+USB+master Bezugsquelle 1 Wire USB-Bus Master ]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=AutoShuttersControl&diff=29294AutoShuttersControl2019-01-28T20:18:13Z<p>No Legend: Anpassung Überschriften und weitere Reading Groups hinzu</p>
<hr />
<div>{{Baustelle}}<br />
{{Infobox Modul<br />
|ModPurpose=Steuerung von Rollläden<br />
|ModCategory=Automatisierung<br />
|ModType=x<br />
<!-- |ModCmdRef= ---- noch nicht Teil von FHEM --><br />
|ModForumArea=Automatisierung<br />
|ModTechName=73_AutoShuttersControl.pm<br />
|ModOwner=CoolTux}}<br />
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. <br />
<br />
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist diesem {{Link2Forum|Topic=90751|LinkText="Thread im Forum"}} zu entnehmen.}}<br />
<br />
== Basics ==<br />
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:<br />
* Rollläden<br />
* Fensterkontakte und <br />
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als ''state'' ''home'', ''asleep'', ''gotosleep'' und ''awoken'' setzen sowie ein Reading ''lastState''.<br />
<br />
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:<br />
* Definition des ASC-Devices<br />
* Einstellung zentraler Vorgaben am ASC-Device<br />
* Markieren der zukünftig zu steuernden Rollladen-Devices<br />
* Einbinden der Rollladen-Devices in das ASC-Device<br />
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)<br />
<br />
== Einrichtung ==<br />
<br />
=== Vorbereitung ===<br />
<br />
{{Hinweis|Ihr benötigt ein aktuelles FHEM. Update ab dem 04.09.2018 Voraussetzung!}}<br />
<br />
=== Define des ASC-Devices ===<br />
Es genügt ein einfaches define ohne weitere Parameter.<br />
<code>define <name> AutoShuttersControl</code><br />
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut ''ASC'' verfügbar wird.<br />
<br />
=== Einstellung zentraler Vorgaben ===<br />
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.<br />
Diese Attribute können auch nachträglich noch geändert werden.<br />
<br />
=== Markieren zu steuernder Rollladen-Devices ===<br />
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut ''ASC'' gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei '''1''' bedeutet, dass <br />
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 ''offen'' bedeutet und 100 für ''geschlossen'' steht<br />
* eine bestimmte Position mit '''position''' angefahren wird, also z.B. <code>set <name> position 70</code>.<br />
Dies ist z.B. die passende Wahl für ROLLO-Devices<br />
<br />
Die '''2''' steht für ein umgekehrtes Verhalten und den Befehlsteil ''pct'', also ''offen'' für <code>set <name> pct 100</code>. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.<br />
<br />
=== Einbinden in das ASC-Device ===<br />
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit <br />
<code>set <name> scanForShutters</code> ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.<br />
<br />
=== Einstellen der individuellen Vorgaben ===<br />
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. <br />
Die Beschreibung der Attribute ist in der commandref enthalten.<br />
<br />
== Readings ==<br />
<br />
===Readings im ASC-Device selbst.===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Bedeutung <br />
|-<br />
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro Events, Sonnenauf- oder Sonnenuntergang oder feste Zeit pro Rollonamen <br />
|-<br />
|..._lastPosValue || ||letzter abgesetzter Fahrbefehl pro Rollonamen<br />
|-<br />
|..._lastDelayPosValue || ||letzter abgesetzter Fahrbefehl welcher beim nächsten zulässigen Event ausgeführt wird.<br />
|-<br />
|partyMode ||on, off || aktiviert den globalen Partymodus. Alle Rollläden, welche das Attribut AutoShuttersControl_Partymode bei sich auf on gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt<br />
|-<br />
|lockOut || on, off ||für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs AutoShuttersControl_lock-out im jeweiligen Rolladen. (siehe Beschreibung bei den Attributen für die Rolladendevices)<br />
|-<br />
|room_... || ||Auflistung aller Rollläden welche in den jeweiligen Rämen gefunden wurde, Bsp.: room_Schlafzimmer,Terrasse<br />
|-<br />
|state || ||Status des Devices active, enabled, disabled<br />
|-<br />
|sunriseTimeWeHoliday|| on,off ||wird das Rolladen Device Attribut Attributes AutoShuttersControl_Time_Up_WE_Holiday beachtet oder nicht<br />
|-<br />
|userAttrList || rolled out ||Status der UserAttribute, welche an die Rollläden gesendet werden<br />
|}<br />
<br />
===Readings in den Rolllädendevices===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Bedeutung <br />
|-<br />
|ASC_Time_DriveUp ||Sonnenaufgangszeit für das Rollo<br />
|-<br />
|ASC_Time_DriveDown ||Sonnenuntergangszeit für das Rollo<br />
|-<br />
|ASC_ShuttersLastDrive ||Grund des letzten fahrens vom Rolladen<br />
|}<br />
<br />
== Settings ==<br />
<br />
===Set Befehle für ASC-Device===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Beschreibung <br />
|-<br />
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading partyMode<br />
|-<br />
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading partyMode<br />
|-<br />
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.<br />
|-<br />
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut "AutoShuttersControl" 1, 2<br />
|-<br />
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Attributes AutoShuttersControl_Time_Up_WE_Holiday für Rollladen-Devices<br />
|-<br />
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an<br />
|-<br />
|selfDefence ||on, off||aktiviert/deaktiviert den Selbstschutz, wenn das Residents Device absent meldet und selfDefence aktiv ist und ein Fenster im Haus steht noch offen, wird an diesem Fenster das Rollo runtergefahren<br />
|-<br />
|wiggle ||||Bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zurück zur Ursprungsposition<br />
|-<br />
|||||<br />
|}<br />
<br />
== Get ==<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Beschreibung<br />
|-<br />
| showShuttersInformations ||zeigt eine Übersicht der Autofahrzeiten<br />
|-<br />
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Dient zur Kontrolle<br />
|}<br />
== Attribute ==<br />
<br />
===Attribute im AutoShuttersControl Device selbst.===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|ASC_antifreezeTemp || || ||Temperatur ab welcher der Frostschutz greifen soll und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.<br />
|-<br />
|ASC_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)<br />
|-<br />
|ASC_autoAstroModeEveningHorizon || || || Höhe über Horizont, wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt<br />
|-<br />
|ASC_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)<br />
|-<br />
|ASC_autoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt<br />
|-<br />
|ASC_autoShuttersControlComfort ||on, off || ||schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate Sensor am Fenster beim Öffnen in eine weit offen Position fährt. Die Offenposition wird beim Rollladen über das Attribut AutoShuttersControl_Pos_after_ComfortOpen eingestellt.<br />
|- <br />
|ASC_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch nach Zeit gesteuert werden sollen<br />
|-<br />
|ASC_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch nach Zeit gesteuert werden sollen<br />
|-<br />
|ASC_temperatureReading || || ||Reading für die Außentemperatur<br />
|-<br />
|ASC_temperatureSensor || || ||Device für die Außentemperatur<br />
|-<br />
|ASC_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading state beinhalten.<br />
|-<br />
|ASC_residentsDevice|| || ||Devicenamen des Residents-Device der obersten Ebene<br />
|-<br />
|ASC_residentsDeviceReading|| || ||Status Reading des Residents-Device der obersten Ebene<br />
|-<br />
|ASC_brightnessMinVal|| || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen<br />
|-<br />
|ASC_brightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen<br />
|-<br />
|ASC_rainSensorDevice || || ||Device, welches bei Regen getriggert werden soll<br />
|-<br />
|ASC_rainSensorReading || || ||das ensprechende Reading zum Regendevice<br />
|-<br />
|ASC_rainSensorShuttersClosedPos || || ||Position in pct, welche der Rollladen bei Regen anfahren soll <br />
|-<br />
|ASC_shuttersDriveOffset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet keine Verzögerung<br />
|-<br />
|ASC_twilightDevice || || ||Device welches Informationen zum Sonnenstand liefert, wird unter anderem für die Beschattung verwendet.<br />
|-<br />
|ASC_expert || || ||ist der Wert 1 werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt<br />
|-<br />
| || || ||<br />
|-<br />
| || || ||<br />
|}<br />
<br />
===Attribute in den Rolllädendevices===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|ASC || 0, 1, 2|| ||0 = "kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles",1 = "Inverse oder Rollo - Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum prozentualen Fahren ist position",2 = "Homematic Style - Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum prozentualen Fahren ist pct<br />
|-<br />
|ASC_Antifreeze || soft, am, pm, hard, off|| ||Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos und wenn hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren<br />
|-<br />
|ASC_Antifreeze_Pos || || ||Position die angefahren werden soll wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist<br />
|-<br />
|ASC_AutoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC<br />
|-<br />
|ASC_AutoAstroModeEveningHorizon || || ||Höhe über Horizont wenn beim Attribut ASC_autoAstroModeEvening HORIZON ausgewählt<br />
|-<br />
|ASC_AutoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC<br />
|-<br />
|ASC_AutoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt<br />
|-<br />
|ASC_Closed_Pos || || ||in 10 Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Down || astro, time, brightness || ||bei Astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit,es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut ob die als Attribut im Moduldevice hinterlegte ASC_brightnessMinVal erreicht wurde, wenn ja wird der Rolladen runter gefahren<br />
|-<br />
|ASC_Mode_Down ||always, home, absent, off || ||wann darf die Automatik steuern. immer,niemals,bei abwesenheit des Roommate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)<br />
|-<br />
|ASC_Mode_Up ||always, home, absent, off || ||wann darf die Automatik steuern. immer,niemals,bei abwesenheit des Roommate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)<br />
|-<br />
|ASC_Drive_Offset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet sofort, -1 bedeutet das das gleichwertige Attribut aus dem ASC-Device ausgewertet werden soll.<br />
|-<br />
|ASC_Open_Pos || || ||in 10 Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Partymode || on, off || ||schaltet den Partymodus an oder aus. Wird dann am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und erst später ausgeführt<br />
|-<br />
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent an gibt. Wird bei unbekannten Device -ypen auch als set Befehl zum Fahren verwendet<br />
|-<br />
|ASC_Pos_after_ComfortOpen || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Roommate_Reading || || ||das Reading zum Roommate-Device, welches den Status wieder gibt<br />
|-<br />
|ASC_Roommate_Device || || ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Raumes vom Rollladen wieder gibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern<br />
|-<br />
|ASC_Time_Down_Early || || ||Sunset frühste Zeit zum Runterfahren<br />
|-<br />
|ASC_Time_Down_Late || || ||Sunset späteste Zeit zum Runterfahren<br />
|-<br />
|ASC_Time_Up_Early || || ||Sunrise frühste Zeit zum Hochfahren<br />
|-<br />
|ASC_Time_Up_Late || || ||Sunrise späteste Zeit zum Hochfahren<br />
|-<br />
|ASC_Time_Up_WE_Holiday || || ||Sunrise frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet). Achtung! Sollte nicht größer sein als ASC_Time_Up_Late, sonst wird ASC_Time_Up_Late verwendet<br />
|-<br />
|ASC_Up || astro, time, brightness || ||bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness müssen ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessMinVal erreicht wurde. Wenn ja, wird der Rolladen runter gefahren<br />
|-<br />
|ASC_Ventilate_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist<br />
|-<br />
|ASC_WindowRec || || ||Name des Fensterkontakts an welchen Fenster der Rollladen angebracht ist<br />
|-<br />
|ASC_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)<br />
|-<br />
|ASC_lock-out || soft, hard || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht, den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich.<br />
|-<br />
|ASC_lock-outCmd || inhibit, blocked || ||set Befehl für das Rolladen-Device zum Hardware sperren. Der Befehl wird verwendet, wenn man "ASC_lock-out" auf hard setzt<br />
|-<br />
|ASC_Self_Defense_Exclude || on, off || ||bei on Wert wird dieser Rolladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist.<br />
|-<br />
|ASC_Shading_Brightness_Sensor || || ||Sensor-Device, welches für die Lichtwerte verwendet wird. ACHTUNG! Findet auch Verwendung bei ASC_Down - brightness<br />
|-<br />
|ASC_BrightnessMinVal || || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von -1 nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen<br />
|-<br />
|ASC_BrightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von -1 nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen<br />
|-<br />
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf terrace gesetzt ist und das Residence Device in den Status "done" geht und SelfDefence aktiv ist wird das Rollo geschlossen<br />
|- <br />
|ASC_WiggleValue || || ||Wert um welchen sich die Position des Rollladens ändern soll <br />
|-<br />
| || || ||<br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|}<br />
<br />
== Hilfsmittel Allgemein==<br />
Achtung: Die Device Namen sind auf die entsprechende Konfiguration des einzelnen Anzupassen.<br />
<br />
=== Hilfsmittel Übersicht ===<br />
<br />
define ASC_Jalousie_Info weblink htmlCode {AutoShuttersControl::GetShuttersInformation($defs{'JalousieControl'})}<br />
<br />
[[Datei:ASC Overview.JPG|600px|]]<br />
<br />
<br />
== Hilfsmittel Reading Group für Homematic Devices==<br />
readingsGroup, um die diversen Level einzustellen<br />
<br />
Erfolgreich getestet mit Homematic Devices, Stand 2019-01-28 no_Legend<br />
<br />
Achtung: Codezeilen wurden aus der Config Datei kopiert.<br />
<br />
[[Datei:RG AutoShuttersControl Homematic.png|600px|]]<br />
<br />
define rg_ASC_Rollaeden_Level readingsGroup <Gerät>,<ASC>,<Antifreeze>,<Antifreeze_Pos>,<Closed_Pos>,<Open_Pos>,<ASC_Ventilate_Pos> \<br />
(.*Rollladen.*|.*Rollladen|Jalousie_.*):?ASC,?ASC_Antifreeze,?ASC_Antifreeze_Pos,?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Ventilate_Pos<br />
setuuid rg_ASC_Rollaeden_Level 5c4308e1-f33f-abd1-167d-cc1b5f137cf793c8<br />
attr rg_ASC_Rollaeden_Level commands {ASC => 'ASC:0,1,2',\<br />
ASC_Antifreeze => 'ASC_Antifreeze:off,soft,hard,am,pm',\<br />
ASC_Antifreeze_Pos =>'ASC_Antifreeze_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Closed_Pos => 'ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Open_Pos => 'ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Ventilate_Pos => 'ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'}<br />
attr rg_ASC_Rollaeden_Level room 9.72_Rolladen<br />
<br />
define rg_ASC_Rollaeden_Times readingsGroup <Gerät>,<Position>,<Time_Up_Early>,<Time_Up_Late>,<Time_Up_WE/Hol>,<Time_Down_Early>,<Time_Down_Late>,<Mode_Down>,<Mode_Up> \<br />
(.*Rollladen.*|.*Rollladen|Jalousie_.*):level,?ASC_Time_Up_Early,?ASC_Time_Up_Late,?ASC_Time_Up_WE_Holiday,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up<br />
setuuid rg_ASC_Rollaeden_Times 5c4308e1-f33f-abd1-94a7-fbf717635760f863<br />
attr rg_ASC_Rollaeden_Times commands {level => 'pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Time_Down_Early => 'ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00', \<br />
ASC_Time_Down_Late => 'ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30', \<br />
ASC_Time_Up_WE_Holiday => 'ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',\<br />
ASC_Time_Up_Early => 'ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Time_Up_Late => 'ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Mode_Down => 'ASC_Mode_Down:always,absent,off', \<br />
ASC_Mode_Up => 'ASC_Mode_Up:always,absent,off' }<br />
attr rg_ASC_Rollaeden_Times room 9.72_Rolladen<br />
<br />
=== Hilfsmittel Reading Group für FIBARO Roller Shutter FGR-222 Devices===<br />
<br />
Getestet von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099<br />
<br />
Stand 2019-01-28 <br />
<br />
[[Datei:ASC Jalousien Level.JPG|600px|]]<br />
<br />
[[Datei:ASC Jalousien Times.JPG|600px|]]<br />
<br />
<br />
<br />
<br />
define ASC_Jalousien_Times readingsGroup <Gerät>,<Stand>,<Time_Up_Early>,<Time_Up_WE>,<Time_Up_Late>,<Time_Down_Early>,<Time_Down_Late>,<Mode_Down>,<Mode_Up>,<PartyMode>,<LockOut> (.*_Jalousie.*):position,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up,?ASC_Partymode,?ASC_LockOut<br />
attr ASC_Jalousien_Times commands {position => 'dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_Mode_Down => 'ASC_Mode_Down:always,absent,off',<br />
ASC_Mode_Up => 'ASC_Mode_Up:always,absent,off',<br />
ASC_Partymode => 'ASC_Partymode:on,off',<br />
ASC_LockOut => 'ASC_LockOut:soft,hard,off',<br />
ASC_Time_Down_Early => 'ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00', <br />
ASC_Time_Down_Late => 'ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30',<br />
ASC_Time_Up_Early => 'ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',<br />
ASC_Time_Up_Late =>'ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',<br />
ASC_Time_Up_WE_Holiday => 'ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00'}<br />
attr ASC_Jalousien_Times room Jalousien<br />
<br />
define Jalousien_Level readingsGroup <Gerät>,<Closed_Pos>,<Open_Pos>,<Comfort_Pos>,<Ventilate_Pos>,<PrivacyDown_Pos>,<Shading_Pos> (.*_Jalousie.*):?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_ComfortOpen_Pos,?ASC_Ventilate_Pos,?ASC_PrivacyDown_Pos,?ASC_Shading_Pos<br />
attr Jalousien_Level commands { ASC_Closed_Pos => 'ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_Open_Pos => 'ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_ComfortOpen_Pos => 'ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_Ventilate_Pos => 'ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_PrivacyDown_Pos => 'ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99',<br />
ASC_Shading_Pos => 'ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99'}<br />
attr Jalousien_Level room Jalousien<br />
<br />
=== Hilfsmittel ===<br />
tbd<br />
<br />
readingsGroup, um die diversen Level einzustellen: <br />
<br />
define rg_ASC_Rollaeden_Level readingsGroup <Gerät>,<Closed_Pos>,<Open_Pos>,<Shading_Pos>,<Ventilate_Pos> (Rolladen_.*|Jalousie_.*)..:?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Shading_Pos,?ASC_Ventilate_Pos<br />
attr rg_ASC_Rollaeden_Level commands { ASC_Closed_Pos => 'ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Open_Pos => 'ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Shading_Pos => 'ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Ventilate_Pos => 'ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'}<br />
[[Datei:ReadingsGroup ASC Level.png|600px|]]<br />
readingsGroup, um die diversen Zeiten einzustellen:<br />
<br />
define rg_ASC_Rollaeden_Times readingsGroup <Gerät>,<Stand>,<Time_Up_Early>,<Time_Up_WE>,<Time_Up_Late>,<Time_Down_Early>,<Time_Down_Late>,<Mode_Down>,<Mode_Up> (Rolladen_.*|Jalousie_.*)..:level,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up<br />
attr rg_ASC_Rollaeden_Times commands {level => 'pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Mode_Down => 'ASC_Mode_Down:always,absent,off',\<br />
ASC_Mode_Up => 'ASC_Mode_Up:always,absent,off',\<br />
ASC_Time_Down_Early => 'ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00', \<br />
ASC_Time_Down_Late => 'ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30',\<br />
ASC_Time_Up_Early => 'ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Time_Up_Late =>'ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',ASC_Time_Up_WE_Holiday => 'ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00'}<br />
[[Datei:ReadingsGroup ASC Times.png|600px|]]<br />
<br />
== Weblinks ==<br />
* {{Link2Forum|Topic=92628|LinkText="Thread zum Modul im Forum"}}<br />
* {{Link2Forum|Topic=90751|LinkText="Thread zur Entwicklung im Forum"}} <br />
* {{Link2Forum|Topic=73964|LinkText="Thread zu den Scripten von user cluni"}}, die der Entwicklung des Moduls zugrunde liegen<br />
<br />
<br />
[[Kategorie:Code Snippets]]<br />
[[Kategorie:Rollladensteuerung]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:ASC_Overview.JPG&diff=29293Datei:ASC Overview.JPG2019-01-28T20:13:45Z<p>No Legend: Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</p>
<hr />
<div>== Beschreibung ==<br />
Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:ASC_Jalousien_Times.JPG&diff=29292Datei:ASC Jalousien Times.JPG2019-01-28T20:13:03Z<p>No Legend: Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</p>
<hr />
<div>== Beschreibung ==<br />
Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:ASC_Jalousien_Level.JPG&diff=29291Datei:ASC Jalousien Level.JPG2019-01-28T20:11:54Z<p>No Legend: Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</p>
<hr />
<div>== Beschreibung ==<br />
Mit Zustimmung von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099</div>No Legendhttp://wiki.fhem.de/w/index.php?title=AutoShuttersControl&diff=29290AutoShuttersControl2019-01-28T19:19:37Z<p>No Legend: Hilfsmittel Reading Group für Homematic devices hinzu</p>
<hr />
<div>{{Baustelle}}<br />
{{Infobox Modul<br />
|ModPurpose=Steuerung von Rollläden<br />
|ModCategory=Automatisierung<br />
|ModType=x<br />
<!-- |ModCmdRef= ---- noch nicht Teil von FHEM --><br />
|ModForumArea=Automatisierung<br />
|ModTechName=73_AutoShuttersControl.pm<br />
|ModOwner=CoolTux}}<br />
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. <br />
<br />
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist diesem {{Link2Forum|Topic=90751|LinkText="Thread im Forum"}} zu entnehmen.}}<br />
<br />
== Basics ==<br />
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:<br />
* Rollläden<br />
* Fensterkontakte und <br />
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als ''state'' ''home'', ''asleep'', ''gotosleep'' und ''awoken'' setzen sowie ein Reading ''lastState''.<br />
<br />
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:<br />
* Definition des ASC-Devices<br />
* Einstellung zentraler Vorgaben am ASC-Device<br />
* Markieren der zukünftig zu steuernden Rollladen-Devices<br />
* Einbinden der Rollladen-Devices in das ASC-Device<br />
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)<br />
<br />
== Einrichtung ==<br />
<br />
=== Vorbereitung ===<br />
<br />
{{Hinweis|Ihr benötigt ein aktuelles FHEM. Update ab dem 04.09.2018 Voraussetzung!}}<br />
<br />
=== Define des ASC-Devices ===<br />
Es genügt ein einfaches define ohne weitere Parameter.<br />
<code>define <name> AutoShuttersControl</code><br />
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut ''ASC'' verfügbar wird.<br />
<br />
=== Einstellung zentraler Vorgaben ===<br />
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.<br />
Diese Attribute können auch nachträglich noch geändert werden.<br />
<br />
=== Markieren zu steuernder Rollladen-Devices ===<br />
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut ''ASC'' gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei '''1''' bedeutet, dass <br />
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 ''offen'' bedeutet und 100 für ''geschlossen'' steht<br />
* eine bestimmte Position mit '''position''' angefahren wird, also z.B. <code>set <name> position 70</code>.<br />
Dies ist z.B. die passende Wahl für ROLLO-Devices<br />
<br />
Die '''2''' steht für ein umgekehrtes Verhalten und den Befehlsteil ''pct'', also ''offen'' für <code>set <name> pct 100</code>. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.<br />
<br />
=== Einbinden in das ASC-Device ===<br />
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit <br />
<code>set <name> scanForShutters</code> ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.<br />
<br />
=== Einstellen der individuellen Vorgaben ===<br />
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. <br />
Die Beschreibung der Attribute ist in der commandref enthalten.<br />
<br />
== Readings ==<br />
<br />
===Readings im ASC-Device selbst.===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Bedeutung <br />
|-<br />
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro Events, Sonnenauf- oder Sonnenuntergang oder feste Zeit pro Rollonamen <br />
|-<br />
|..._lastPosValue || ||letzter abgesetzter Fahrbefehl pro Rollonamen<br />
|-<br />
|..._lastDelayPosValue || ||letzter abgesetzter Fahrbefehl welcher beim nächsten zulässigen Event ausgeführt wird.<br />
|-<br />
|partyMode ||on, off || aktiviert den globalen Partymodus. Alle Rollläden, welche das Attribut AutoShuttersControl_Partymode bei sich auf on gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt<br />
|-<br />
|lockOut || on, off ||für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs AutoShuttersControl_lock-out im jeweiligen Rolladen. (siehe Beschreibung bei den Attributen für die Rolladendevices)<br />
|-<br />
|room_... || ||Auflistung aller Rollläden welche in den jeweiligen Rämen gefunden wurde, Bsp.: room_Schlafzimmer,Terrasse<br />
|-<br />
|state || ||Status des Devices active, enabled, disabled<br />
|-<br />
|sunriseTimeWeHoliday|| on,off ||wird das Rolladen Device Attribut Attributes AutoShuttersControl_Time_Up_WE_Holiday beachtet oder nicht<br />
|-<br />
|userAttrList || rolled out ||Status der UserAttribute, welche an die Rollläden gesendet werden<br />
|}<br />
<br />
===Readings in den Rolllädendevices===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Bedeutung <br />
|-<br />
|ASC_Time_DriveUp ||Sonnenaufgangszeit für das Rollo<br />
|-<br />
|ASC_Time_DriveDown ||Sonnenuntergangszeit für das Rollo<br />
|-<br />
|ASC_ShuttersLastDrive ||Grund des letzten fahrens vom Rolladen<br />
|}<br />
<br />
== Settings ==<br />
<br />
===Set Befehle für ASC-Device===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Beschreibung <br />
|-<br />
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading partyMode<br />
|-<br />
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading partyMode<br />
|-<br />
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.<br />
|-<br />
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut "AutoShuttersControl" 1, 2<br />
|-<br />
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Attributes AutoShuttersControl_Time_Up_WE_Holiday für Rollladen-Devices<br />
|-<br />
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an<br />
|-<br />
|selfDefence ||on, off||aktiviert/deaktiviert den Selbstschutz, wenn das Residents Device absent meldet und selfDefence aktiv ist und ein Fenster im Haus steht noch offen, wird an diesem Fenster das Rollo runtergefahren<br />
|-<br />
|wiggle ||||Bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zurück zur Ursprungsposition<br />
|-<br />
|||||<br />
|}<br />
<br />
== Get ==<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Beschreibung<br />
|-<br />
| showShuttersInformations ||zeigt eine Übersicht der Autofahrzeiten<br />
|-<br />
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Dient zur Kontrolle<br />
|}<br />
== Attribute ==<br />
<br />
===Attribute im AutoShuttersControl Device selbst.===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|ASC_antifreezeTemp || || ||Temperatur ab welcher der Frostschutz greifen soll und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.<br />
|-<br />
|ASC_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)<br />
|-<br />
|ASC_autoAstroModeEveningHorizon || || || Höhe über Horizont, wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt<br />
|-<br />
|ASC_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)<br />
|-<br />
|ASC_autoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt<br />
|-<br />
|ASC_autoShuttersControlComfort ||on, off || ||schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate Sensor am Fenster beim Öffnen in eine weit offen Position fährt. Die Offenposition wird beim Rollladen über das Attribut AutoShuttersControl_Pos_after_ComfortOpen eingestellt.<br />
|- <br />
|ASC_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch nach Zeit gesteuert werden sollen<br />
|-<br />
|ASC_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch nach Zeit gesteuert werden sollen<br />
|-<br />
|ASC_temperatureReading || || ||Reading für die Außentemperatur<br />
|-<br />
|ASC_temperatureSensor || || ||Device für die Außentemperatur<br />
|-<br />
|ASC_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading state beinhalten.<br />
|-<br />
|ASC_residentsDevice|| || ||Devicenamen des Residents-Device der obersten Ebene<br />
|-<br />
|ASC_residentsDeviceReading|| || ||Status Reading des Residents-Device der obersten Ebene<br />
|-<br />
|ASC_brightnessMinVal|| || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen<br />
|-<br />
|ASC_brightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen<br />
|-<br />
|ASC_rainSensorDevice || || ||Device, welches bei Regen getriggert werden soll<br />
|-<br />
|ASC_rainSensorReading || || ||das ensprechende Reading zum Regendevice<br />
|-<br />
|ASC_rainSensorShuttersClosedPos || || ||Position in pct, welche der Rollladen bei Regen anfahren soll <br />
|-<br />
|ASC_shuttersDriveOffset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet keine Verzögerung<br />
|-<br />
|ASC_twilightDevice || || ||Device welches Informationen zum Sonnenstand liefert, wird unter anderem für die Beschattung verwendet.<br />
|-<br />
|ASC_expert || || ||ist der Wert 1 werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt<br />
|-<br />
| || || ||<br />
|-<br />
| || || ||<br />
|}<br />
<br />
===Attribute in den Rolllädendevices===<br />
<br />
{|class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR/>Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|ASC || 0, 1, 2|| ||0 = "kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles",1 = "Inverse oder Rollo - Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum prozentualen Fahren ist position",2 = "Homematic Style - Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum prozentualen Fahren ist pct<br />
|-<br />
|ASC_Antifreeze || soft, am, pm, hard, off|| ||Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos und wenn hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren<br />
|-<br />
|ASC_Antifreeze_Pos || || ||Position die angefahren werden soll wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist<br />
|-<br />
|ASC_AutoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC<br />
|-<br />
|ASC_AutoAstroModeEveningHorizon || || ||Höhe über Horizont wenn beim Attribut ASC_autoAstroModeEvening HORIZON ausgewählt<br />
|-<br />
|ASC_AutoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC<br />
|-<br />
|ASC_AutoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt<br />
|-<br />
|ASC_Closed_Pos || || ||in 10 Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Down || astro, time, brightness || ||bei Astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit,es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut ob die als Attribut im Moduldevice hinterlegte ASC_brightnessMinVal erreicht wurde, wenn ja wird der Rolladen runter gefahren<br />
|-<br />
|ASC_Mode_Down ||always, home, absent, off || ||wann darf die Automatik steuern. immer,niemals,bei abwesenheit des Roommate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)<br />
|-<br />
|ASC_Mode_Up ||always, home, absent, off || ||wann darf die Automatik steuern. immer,niemals,bei abwesenheit des Roommate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)<br />
|-<br />
|ASC_Drive_Offset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, 0 bedeutet sofort, -1 bedeutet das das gleichwertige Attribut aus dem ASC-Device ausgewertet werden soll.<br />
|-<br />
|ASC_Open_Pos || || ||in 10 Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Partymode || on, off || ||schaltet den Partymodus an oder aus. Wird dann am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und erst später ausgeführt<br />
|-<br />
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent an gibt. Wird bei unbekannten Device -ypen auch als set Befehl zum Fahren verwendet<br />
|-<br />
|ASC_Pos_after_ComfortOpen || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Roommate_Reading || || ||das Reading zum Roommate-Device, welches den Status wieder gibt<br />
|-<br />
|ASC_Roommate_Device || || ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Raumes vom Rollladen wieder gibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern<br />
|-<br />
|ASC_Time_Down_Early || || ||Sunset frühste Zeit zum Runterfahren<br />
|-<br />
|ASC_Time_Down_Late || || ||Sunset späteste Zeit zum Runterfahren<br />
|-<br />
|ASC_Time_Up_Early || || ||Sunrise frühste Zeit zum Hochfahren<br />
|-<br />
|ASC_Time_Up_Late || || ||Sunrise späteste Zeit zum Hochfahren<br />
|-<br />
|ASC_Time_Up_WE_Holiday || || ||Sunrise frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet). Achtung! Sollte nicht größer sein als ASC_Time_Up_Late, sonst wird ASC_Time_Up_Late verwendet<br />
|-<br />
|ASC_Up || astro, time, brightness || ||bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness müssen ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessMinVal erreicht wurde. Wenn ja, wird der Rolladen runter gefahren<br />
|-<br />
|ASC_Ventilate_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut ASC<br />
|-<br />
|ASC_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist<br />
|-<br />
|ASC_WindowRec || || ||Name des Fensterkontakts an welchen Fenster der Rollladen angebracht ist<br />
|-<br />
|ASC_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)<br />
|-<br />
|ASC_lock-out || soft, hard || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht, den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich.<br />
|-<br />
|ASC_lock-outCmd || inhibit, blocked || ||set Befehl für das Rolladen-Device zum Hardware sperren. Der Befehl wird verwendet, wenn man "ASC_lock-out" auf hard setzt<br />
|-<br />
|ASC_Self_Defense_Exclude || on, off || ||bei on Wert wird dieser Rolladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist.<br />
|-<br />
|ASC_Shading_Brightness_Sensor || || ||Sensor-Device, welches für die Lichtwerte verwendet wird. ACHTUNG! Findet auch Verwendung bei ASC_Down - brightness<br />
|-<br />
|ASC_BrightnessMinVal || || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von -1 nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen<br />
|-<br />
|ASC_BrightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von -1 nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen<br />
|-<br />
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf terrace gesetzt ist und das Residence Device in den Status "done" geht und SelfDefence aktiv ist wird das Rollo geschlossen<br />
|- <br />
|ASC_WiggleValue || || ||Wert um welchen sich die Position des Rollladens ändern soll <br />
|-<br />
| || || ||<br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|- <br />
| || || ||<br />
|-<br />
| || || || <br />
|}<br />
<br />
== Hilfsmittel Reading Group für Homematic devices==<br />
readingsGroup, um die diversen Level einzustellen<br />
<br />
Erfolgreich getestet mit Homematic Devices, Stand 2019-01-28 no_Legend<br />
<br />
Achtung: Codezeilen wurden aus der Config Datei kopiert.<br />
<br />
[[Datei:RG AutoShuttersControl Homematic.png|600px|]]<br />
<br />
define rg_ASC_Rollaeden_Level readingsGroup <Gerät>,<ASC>,<Antifreeze>,<Antifreeze_Pos>,<Closed_Pos>,<Open_Pos>,<ASC_Ventilate_Pos> \<br />
(.*Rollladen.*|.*Rollladen|Jalousie_.*):?ASC,?ASC_Antifreeze,?ASC_Antifreeze_Pos,?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Ventilate_Pos<br />
setuuid rg_ASC_Rollaeden_Level 5c4308e1-f33f-abd1-167d-cc1b5f137cf793c8<br />
attr rg_ASC_Rollaeden_Level commands {ASC => 'ASC:0,1,2',\<br />
ASC_Antifreeze => 'ASC_Antifreeze:off,soft,hard,am,pm',\<br />
ASC_Antifreeze_Pos =>'ASC_Antifreeze_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Closed_Pos => 'ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Open_Pos => 'ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Ventilate_Pos => 'ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'}<br />
attr rg_ASC_Rollaeden_Level room 9.72_Rolladen<br />
<br />
define rg_ASC_Rollaeden_Times readingsGroup <Gerät>,<Position>,<Time_Up_Early>,<Time_Up_Late>,<Time_Up_WE/Hol>,<Time_Down_Early>,<Time_Down_Late>,<Mode_Down>,<Mode_Up> \<br />
(.*Rollladen.*|.*Rollladen|Jalousie_.*):level,?ASC_Time_Up_Early,?ASC_Time_Up_Late,?ASC_Time_Up_WE_Holiday,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up<br />
setuuid rg_ASC_Rollaeden_Times 5c4308e1-f33f-abd1-94a7-fbf717635760f863<br />
attr rg_ASC_Rollaeden_Times commands {level => 'pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Time_Down_Early => 'ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00', \<br />
ASC_Time_Down_Late => 'ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30', \<br />
ASC_Time_Up_WE_Holiday => 'ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',\<br />
ASC_Time_Up_Early => 'ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Time_Up_Late => 'ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Mode_Down => 'ASC_Mode_Down:always,absent,off', \<br />
ASC_Mode_Up => 'ASC_Mode_Up:always,absent,off' }<br />
attr rg_ASC_Rollaeden_Times room 9.72_Rolladen<br />
<br />
<br />
<br />
== Hilfsmittel ==<br />
tbd<br />
<br />
readingsGroup, um die diversen Level einzustellen: <br />
<br />
define rg_ASC_Rollaeden_Level readingsGroup <Gerät>,<Closed_Pos>,<Open_Pos>,<Shading_Pos>,<Ventilate_Pos> (Rolladen_.*|Jalousie_.*)..:?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Shading_Pos,?ASC_Ventilate_Pos<br />
attr rg_ASC_Rollaeden_Level commands { ASC_Closed_Pos => 'ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Open_Pos => 'ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Shading_Pos => 'ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100',\<br />
ASC_Ventilate_Pos => 'ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'}<br />
[[Datei:ReadingsGroup ASC Level.png|600px|]]<br />
readingsGroup, um die diversen Zeiten einzustellen:<br />
<br />
define rg_ASC_Rollaeden_Times readingsGroup <Gerät>,<Stand>,<Time_Up_Early>,<Time_Up_WE>,<Time_Up_Late>,<Time_Down_Early>,<Time_Down_Late>,<Mode_Down>,<Mode_Up> (Rolladen_.*|Jalousie_.*)..:level,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up<br />
attr rg_ASC_Rollaeden_Times commands {level => 'pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100', \<br />
ASC_Mode_Down => 'ASC_Mode_Down:always,absent,off',\<br />
ASC_Mode_Up => 'ASC_Mode_Up:always,absent,off',\<br />
ASC_Time_Down_Early => 'ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00', \<br />
ASC_Time_Down_Late => 'ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30',\<br />
ASC_Time_Up_Early => 'ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00', \<br />
ASC_Time_Up_Late =>'ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00',ASC_Time_Up_WE_Holiday => 'ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00'}<br />
[[Datei:ReadingsGroup ASC Times.png|600px|]]<br />
<br />
== Weblinks ==<br />
* {{Link2Forum|Topic=92628|LinkText="Thread zum Modul im Forum"}}<br />
* {{Link2Forum|Topic=90751|LinkText="Thread zur Entwicklung im Forum"}} <br />
* {{Link2Forum|Topic=73964|LinkText="Thread zu den Scripten von user cluni"}}, die der Entwicklung des Moduls zugrunde liegen<br />
<br />
<br />
[[Kategorie:Code Snippets]]<br />
[[Kategorie:Rollladensteuerung]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:RG_AutoShuttersControl_Homematic.png&diff=29288Datei:RG AutoShuttersControl Homematic.png2019-01-28T19:18:14Z<p>No Legend: no_Legend</p>
<hr />
<div>== Beschreibung ==<br />
no_Legend</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=28366Homebridge User Configs2018-11-15T12:59:03Z<p>No Legend: /* Homematic SmokeDetector */</p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Mögliche Mappings ==<br />
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js<br />
<br />
Hier ein Beispiel:<br />
Characteristic.Brightness = function() {<br />
Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');<br />
this.setProps({<br />
format: Characteristic.Formats.INT,<br />
unit: Characteristic.Units.PERCENTAGE,<br />
maxValue: 100,<br />
minValue: 0,<br />
minStep: 1,<br />
perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]<br />
});<br />
this.value = this.getDefaultValue();<br />
};<br />
<br />
Das Mapping in diesem Fall, hat den Titel Brightness.<br />
<br />
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.<br />
Das Mapping für ROOMMATE sieht wie folgt aus:<br />
attr TYPE=ROOMMATE genericDeviceType security<br />
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1<br />
für GUEST:<br />
attr TYPE=GUEST genericDeviceType security<br />
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
Dieses Mapping bezieht sich auf ein vorhandenes ''userReading'' mit dem Namen <code>heatingState</code>, womit Homekit die einzelnen Status nachher unterscheidet.<br />
attr <HM-CC-RT-DN_Clima> userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}<br />
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das ''userReading'' anlegen.<br />
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].<br />
<br />
attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}<br />
<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Homematic SmokeDetector ==<br />
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]<br />
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.<br />
<br />
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.<br />
<br />
<br />
attr <XIAOMI> genericDeviceType SmokeSensor<br />
attr <XIAOMI> subType smokeDetector<br />
<br />
attr <XIAOMI> homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
<br />
<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=28365Homebridge User Configs2018-11-15T12:58:49Z<p>No Legend: /* Homematic SmokeDetector */</p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Mögliche Mappings ==<br />
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js<br />
<br />
Hier ein Beispiel:<br />
Characteristic.Brightness = function() {<br />
Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');<br />
this.setProps({<br />
format: Characteristic.Formats.INT,<br />
unit: Characteristic.Units.PERCENTAGE,<br />
maxValue: 100,<br />
minValue: 0,<br />
minStep: 1,<br />
perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]<br />
});<br />
this.value = this.getDefaultValue();<br />
};<br />
<br />
Das Mapping in diesem Fall, hat den Titel Brightness.<br />
<br />
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.<br />
Das Mapping für ROOMMATE sieht wie folgt aus:<br />
attr TYPE=ROOMMATE genericDeviceType security<br />
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1<br />
für GUEST:<br />
attr TYPE=GUEST genericDeviceType security<br />
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
Dieses Mapping bezieht sich auf ein vorhandenes ''userReading'' mit dem Namen <code>heatingState</code>, womit Homekit die einzelnen Status nachher unterscheidet.<br />
attr <HM-CC-RT-DN_Clima> userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}<br />
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das ''userReading'' anlegen.<br />
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].<br />
<br />
attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}<br />
<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Homematic SmokeDetector ==<br />
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]<br />
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.<br />
<br />
Allerdings ist ein Mapping für den Batterie Zustand nötig, dieses wird zu einen späteren Zeitpunkt nachgereicht.<br />
<br />
<br />
attr <XIAOMI> genericDeviceType SmokeSensor<br />
attr <XIAOMI> subType smokeDetector<br />
<br />
attr <XIAOMI> homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
<br />
<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=24455Homebridge User Configs2018-01-09T17:46:08Z<p>No Legend: /* Homematic SmokeDetector */</p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Mögliche Mappings ==<br />
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js<br />
<br />
Hier ein Beispiel:<br />
Characteristic.Brightness = function() {<br />
Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');<br />
this.setProps({<br />
format: Characteristic.Formats.INT,<br />
unit: Characteristic.Units.PERCENTAGE,<br />
maxValue: 100,<br />
minValue: 0,<br />
minStep: 1,<br />
perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]<br />
});<br />
this.value = this.getDefaultValue();<br />
};<br />
<br />
Das Mapping in diesem Fall, hat den Titel Brightness.<br />
<br />
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.<br />
Das Mapping für ROOMMATE sieht wie folgt aus:<br />
attr TYPE=ROOMMATE genericDeviceType security<br />
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1<br />
für GUEST:<br />
attr TYPE=GUEST genericDeviceType security<br />
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Homematic SmokeDetector ==<br />
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]<br />
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.<br />
<br />
Allerdings ist ein Mapping für den Batterie Zustand nötig, dieses wird zu einen späteren Zeitpunkt nachgereicht.<br />
<br />
<br />
attr <XIAOMI> genericDeviceType SmokeSensor<br />
attr <XIAOMI> subType smokeDetector<br />
<br />
<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=24438Homebridge User Configs2018-01-08T09:10:29Z<p>No Legend: </p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Mögliche Mappings ==<br />
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js<br />
<br />
Hier ein Beispiel:<br />
Characteristic.Brightness = function() {<br />
Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');<br />
this.setProps({<br />
format: Characteristic.Formats.INT,<br />
unit: Characteristic.Units.PERCENTAGE,<br />
maxValue: 100,<br />
minValue: 0,<br />
minStep: 1,<br />
perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]<br />
});<br />
this.value = this.getDefaultValue();<br />
};<br />
<br />
Das Mapping in diesem Fall, hat den Titel Brightness.<br />
<br />
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.<br />
Das Mapping für ROOMMATE sieht wie folgt aus:<br />
attr TYPE=ROOMMATE genericDeviceType security<br />
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1<br />
für GUEST:<br />
attr TYPE=GUEST genericDeviceType security<br />
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Homematic SmokeDetector ==<br />
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]<br />
Es sind keine Homebridge Mappings erforderlich.<br />
<br />
attr <XIAOMI> genericDeviceType SmokeSensor<br />
attr <XIAOMI> subType smokeDetector<br />
<br />
<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=24421Homebridge User Configs2018-01-07T14:45:39Z<p>No Legend: </p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.<br />
Das Mapping für ROOMMATE sieht wie folgt aus:<br />
attr TYPE=ROOMMATE genericDeviceType security<br />
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1<br />
für GUEST:<br />
attr TYPE=GUEST genericDeviceType security<br />
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Homematic SmokeDetector ==<br />
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]<br />
Es sind keine Homebridge Mappings erforderlich.<br />
<br />
attr <XIAOMI> genericDeviceType SmokeSensor<br />
attr <XIAOMI> subType smokeDetector<br />
<br />
<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg&diff=24418Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg2018-01-07T14:39:10Z<p>No Legend: Homebridge-Homematic-Smokedetector-Gen1 in Eve</p>
<hr />
<div>Homebridge-Homematic-Smokedetector-Gen1 in Eve</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Staubsaugerroboter&diff=24407Staubsaugerroboter2018-01-07T11:31:10Z<p>No Legend: /* Erfahrungen */ kurzes Statement zum Modul.</p>
<hr />
<div>== Einführung ==<br />
== Produkte und Einbindung in FHEM ==<br />
=== Dyson ===<br />
==== Produkte ====<br />
Siehe [http://www.dyson.de/staubsauger/saugroboter/dyson-360-eye.aspx Dyson 360 Eye]. Baut sehr hoch, hohe Saugleistung. Sehr kritische Amazon-Bewertungen.<br />
==== Einbindung in FHEM ====<br />
==== Erfahrungen ====<br />
<br />
=== LG ===<br />
==== Produkte ====<br />
Siehe [http://www.lg.com/de/staubsauger-roboter Produktübersicht]<br />
==== Einbindung in FHEM ====<br />
Siehe [[HOMBOT]] und [https://forum.fhem.de/index.php/topic,44923.msg367178.html#msg367178 Forumsthread].<br />
<br />
Zusammenfassung:<br />
<br />
# Kompatiblen WiFi-Stick kaufen<br />
# Firmware-Hack einspielen nach Anleitung<br />
# HOMEBOT-Modul installieren<br />
# Im WiFi-Router, dhcp-Optionen den Roboter eine feste IP zuweisen<br />
# Roboter in FHEM integrieren<br><code>define Dobby HOMBOT <IP-Adresse></code><br />
# Mittels at/DOIF oder notifies die Reinigung anstossen, z.B.<br> <code>define DI_LGHomeBotSchedule DOIF ([07:45|8] or [10:30|7]) (set Dobby cleanStart)</code><br />
<br />
==== Erfahrungen ====<br />
<br />
# ('''LG VR64701LVMP''') Nach einem Jahr täglichem Gebrauch auf ca. 160qm, Hartboden Fliesen und Holz: Gerät verliert sein Vorderrad, Ersatz nur bei geöffnetem Gerät möglich. Verbrauchsmaterialien: 2 HEPA-Filter, zwei rotierende Vorderbürsten (gelb). Sehr gefrickelte WiFi-Installation in Abhängigkeit mit der Firmware. Reinigungsleistung in Ordnung, keine Meldung über vollen Sammelbehälter. In vielen Ecken bleibt Staub liegen. Gerät versucht häufig, über Stufen und Kanten zu klettern und bleibt dort hängen (Türschwellen, Türstopper). Ersatzteil-Beschaffung einfach. Mapping mangelhaft, Raumerkennung nicht gelungen und variiert täglich. Einsatz in dunklen Räumen nicht gelungen. Firmware-Hack-Anleitung für WiFi auf [http://www.roboter-forum.com/showthread.php?13718-HomBot-3-0-Guide-Alle-Infos-Alle-Links www.roboter-forum.com]<br />
<br />
=== Neato ===<br />
==== Produkte ====<br />
Siehe [https://www.neatorobotics.com/de/robot-vacuum/botvac/ Produktübersicht]. Vorwerk und Neato entwickeln gemeinsam.<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,51713.0.html Forumsthread] und Link zu Github<br />
==== Erfahrungen ====<br />
=== Roomba ===<br />
==== Produkte ====<br />
Siehe [http://www.irobot.de/Haushaltsroboter/staubsaugen Produktübersicht]<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,67632.msg603276.html#msg603276 Forumsthread]<br />
==== Erfahrungen ====<br />
=== Vorwerk ===<br />
==== Produkte ====<br />
Siehe [https://kobold.vorwerk.de/saugroboter/ Produktübersicht]. Vorwerk und Neato entwickeln gemeinsam.<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,51713.0.html Forumsthread] und Link zu Github<br />
==== Erfahrungen ====<br />
=== Xiaomi ===<br />
==== Produkte ====<br />
Offiziell nicht in Europa erhältlich, jedoch bei de.gearbest.com.<br />
Siehe [http://de.gearbest.com/robot-vacuum/pp_440546.html?wid=35 Mi Vaccum]<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
==== Einbindung in Homebridge ====<br />
Siehe [https://wiki.fhem.de/wiki/Homebridge_User_Configs Wiki]<br />
==== Erfahrungen ====<br />
Modul ist noch in Entwicklung.<br />
Bei mir läuft das Modul seit ca. 2 Wochen ohne Probleme. Stand 2018-01-07<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Staubsaugerroboter&diff=24406Staubsaugerroboter2018-01-07T11:29:32Z<p>No Legend: /* Xiaomi */</p>
<hr />
<div>== Einführung ==<br />
== Produkte und Einbindung in FHEM ==<br />
=== Dyson ===<br />
==== Produkte ====<br />
Siehe [http://www.dyson.de/staubsauger/saugroboter/dyson-360-eye.aspx Dyson 360 Eye]. Baut sehr hoch, hohe Saugleistung. Sehr kritische Amazon-Bewertungen.<br />
==== Einbindung in FHEM ====<br />
==== Erfahrungen ====<br />
<br />
=== LG ===<br />
==== Produkte ====<br />
Siehe [http://www.lg.com/de/staubsauger-roboter Produktübersicht]<br />
==== Einbindung in FHEM ====<br />
Siehe [[HOMBOT]] und [https://forum.fhem.de/index.php/topic,44923.msg367178.html#msg367178 Forumsthread].<br />
<br />
Zusammenfassung:<br />
<br />
# Kompatiblen WiFi-Stick kaufen<br />
# Firmware-Hack einspielen nach Anleitung<br />
# HOMEBOT-Modul installieren<br />
# Im WiFi-Router, dhcp-Optionen den Roboter eine feste IP zuweisen<br />
# Roboter in FHEM integrieren<br><code>define Dobby HOMBOT <IP-Adresse></code><br />
# Mittels at/DOIF oder notifies die Reinigung anstossen, z.B.<br> <code>define DI_LGHomeBotSchedule DOIF ([07:45|8] or [10:30|7]) (set Dobby cleanStart)</code><br />
<br />
==== Erfahrungen ====<br />
<br />
# ('''LG VR64701LVMP''') Nach einem Jahr täglichem Gebrauch auf ca. 160qm, Hartboden Fliesen und Holz: Gerät verliert sein Vorderrad, Ersatz nur bei geöffnetem Gerät möglich. Verbrauchsmaterialien: 2 HEPA-Filter, zwei rotierende Vorderbürsten (gelb). Sehr gefrickelte WiFi-Installation in Abhängigkeit mit der Firmware. Reinigungsleistung in Ordnung, keine Meldung über vollen Sammelbehälter. In vielen Ecken bleibt Staub liegen. Gerät versucht häufig, über Stufen und Kanten zu klettern und bleibt dort hängen (Türschwellen, Türstopper). Ersatzteil-Beschaffung einfach. Mapping mangelhaft, Raumerkennung nicht gelungen und variiert täglich. Einsatz in dunklen Räumen nicht gelungen. Firmware-Hack-Anleitung für WiFi auf [http://www.roboter-forum.com/showthread.php?13718-HomBot-3-0-Guide-Alle-Infos-Alle-Links www.roboter-forum.com]<br />
<br />
=== Neato ===<br />
==== Produkte ====<br />
Siehe [https://www.neatorobotics.com/de/robot-vacuum/botvac/ Produktübersicht]. Vorwerk und Neato entwickeln gemeinsam.<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,51713.0.html Forumsthread] und Link zu Github<br />
==== Erfahrungen ====<br />
=== Roomba ===<br />
==== Produkte ====<br />
Siehe [http://www.irobot.de/Haushaltsroboter/staubsaugen Produktübersicht]<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,67632.msg603276.html#msg603276 Forumsthread]<br />
==== Erfahrungen ====<br />
=== Vorwerk ===<br />
==== Produkte ====<br />
Siehe [https://kobold.vorwerk.de/saugroboter/ Produktübersicht]. Vorwerk und Neato entwickeln gemeinsam.<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,51713.0.html Forumsthread] und Link zu Github<br />
==== Erfahrungen ====<br />
=== Xiaomi ===<br />
==== Produkte ====<br />
Offiziell nicht in Europa erhältlich, jedoch bei de.gearbest.com.<br />
Siehe [http://de.gearbest.com/robot-vacuum/pp_440546.html?wid=35 Mi Vaccum]<br />
==== Einbindung in FHEM ====<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
==== Einbindung in Homebridge ====<br />
Siehe [https://wiki.fhem.de/wiki/Homebridge_User_Configs Wiki]<br />
==== Erfahrungen ====<br />
<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&diff=24405Homebridge User Configs2018-01-07T11:19:32Z<p>No Legend: Xiaomi Vacuum Cleaner 1. Generation Mapping hinzu</p>
<hr />
<div>Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.<br />
<br />
Bitte immer die FHEM Version und Homebridge Version angegeben.<br />
<br />
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/<br />
== Feuchtesensor ==<br />
Zum Einstieg etwas leicht nachvollziehbares. <br />
<br />
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):<br />
<br />
<code>attr meinSensor genericDeviceType HumiditySensor</code><br />
<br />
Im nächsten Schritt werden die Readings gemappt:<br />
<br />
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code> <br />
<br />
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht<br />
<br />
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.<br />
<br />
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW. <br />
<br />
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.<br />
<br />
== EnOcean STM 250 Tür-/Fensterkontakt ==<br />
Der STM 250 liefert als Status in FHEM <code>open</code>, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. <br />
<br />
Die characteristic <code>ContactSensorState</code> von HomeKit liefert entweder den Wert <code>CONTACT_DETECTED=0</code> oder <code>CONTACT_NOT_DETECTED=1</code> zurück. Wobei <code>CONTACT_DETECTED</code> bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung <code>CONTACT_DETECTED=0=JA</code> bzw. <code>CONTACT_NOT_DETECTED=1=NEIN</code> zurück.<br />
<br />
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut <code>genericdeviceType</code> der Wert <code>ContactSensor</code> hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.<br />
<br />
Folgende Attribute dann hinzufügen:<br />
attr STM250 genericDeviceType ContactSensor<br />
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==<br />
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]<br />
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.<br />
<br />
Dazu müssen folgende Schritte unternommen werden:<br />
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen<br />
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten<br />
<br />
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:<br />
attr <ROOMMATE> genericDeviceType switch<br />
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent<br />
<br />
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.<br />
<br />
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.<br />
<br />
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 9893<br />
Homebridge 0.2.16<br />
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}<br />
<br />
== ZWave Türschloss Vision ZM1701 einbinden ==<br />
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open<br />
<br />
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.<br />
<br />
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:<br />
attr <ZM1701> genericDeviceType lock<br />
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open<br />
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close<br />
attr <ZM1701> webCmd open:close<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12191<br />
homebridge 0.4.6<br />
homebridge-fhem 0.2.48<br />
<br />
== Roomba über THINKINGCLEANER Modul ==<br />
attr <THINKINGCLEANER> genericDeviceType switch<br />
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING<br />
attr <THINKINGCLEANER> siriName Robby<br />
<br />
<br />
Getestet mit<br />
FHEM 5.7 Rev. 12680<br />
homebridge 0.4.11<br />
homebridge-fhem 0.2.66<br />
<br />
<br />
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==<br />
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]<br />
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1<br />
CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1<br />
StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW<br />
TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0<br />
CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF<br />
attr <HMCCRTDN_Channel2_Clima> siriName Robby<br />
<br />
== Xiaomi Vacuum Cleaner 1. Generation ==<br />
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]<br />
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.<br />
<br />
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]<br />
Das Modul muss manuell installiert werden.<br />
<br />
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.<br />
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.<br />
<br />
attr <XIAOMI> genericDeviceType switch<br />
attr <XIAOMI> homebridgeMapping On=state,valueOn=/Cleaning|Paused/,valueOff=/Docked|Charging|Sleeping/,cmdOn=start,cmdOff=charge<br />
RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1<br />
BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1<br />
StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW<br />
ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/Cleaning|Returning.to.base/:NOT_CHARGEABLE<br />
OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/Cleaning|Paused/:OCCUPANCY_NOT_DETECTED<br />
FilterLifeLevel=consumables_filter,minValue=0,maxValue=100<br />
FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg&diff=24404Datei:XIAOMI VACUUM CLEANER-Gen1.jpg2018-01-07T11:12:12Z<p>No Legend: XIAOMI_VACUUM_CLEANER-Gen1 EVE Screenshot von noLegend</p>
<hr />
<div>XIAOMI_VACUUM_CLEANER-Gen1 EVE Screenshot von noLegend</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&diff=23443Intertechno Code Berechnung2017-12-03T13:14:13Z<p>No Legend: /* Renkforce RSL366R */ Code Tage für Definition hinzu</p>
<hr />
<div>'''Intertechno''' Systemkomponenten sind kostengünstige und weit verbreitete Funkschalter/-dimmer im 433 MHz Bereich, die man in fast jedem Baumarkt unter den Markennamen Intertechno, düwi, KlikAanKlikUit usw. erhalten kann. <br />
<br />
Es gibt eine Anzahl weiterer Hersteller/Handelsmarken mit ähnlicher Kodierung oder Einstellmöglichkeiten mit DIP Schaltern, die ebenfalls mit dem Intertechno Code geschaltet werden können. Dazu zählen von Usern bereits erfolgreich getestete Geräte von Elro AB440, FLS-100/m-e, Wetekom/Westfalia und weitere, theoretisch mögliche aber ungetestete Systeme wie Unitec oder Arctech Steckdosen (siehe [http://avr.börke.de/E-Funk.htm Börkes-HP])<br />
<br />
== Voraussetzungen in FHEM ==<br />
Schalten kann man die Intertechno Funkkomponenten in FHEM über verschiedene Wege. So z.B. über CUL/CUNO, Tellstick, [[AVR-NET-IO]].<br />
<br />
Hier beschrieben ist die Ansteuerung über CUL/CUNO, dessen Firmware für Intertechno erweitert wurde (Danke an Olaf Droegehorn). Momentan ist in CUL/CUNO das SENDEN von Intertechno Funk implementiert. Die Firmware muss mindestens den Stand 1.44 haben (Kontrolle der Version in den FHEM Detaildaten zum [[CUL]]/[[CUNO]]). Die CUL433/CUNO433 haben dabei volle Reichweite, die Versionen CUL868/CUNO868 funktionieren ebenfalls, haben aufgrund der nicht optimalen Antennenlänge und falschen Abstimmung für den Frequenzbereich aber nur eine eingeschränke Reichweite.<br />
<br />
=== Definition ===<br />
Die Definition des IT Gerätes in FHEM sieht für '''alte Geräte''' so aus:<br />
<syntaxhighlight lang=text><br />
define myITSwitch IT <housecode><group_switch> <on-code> <off-code> [<dimup-code> <dimdown-code>]<br />
attr myITSwitch IODev CUL_x (CUNO_x)<br />
attr myITSwitch model itswitch<br />
</syntaxhighlight><br />
Die weitere Anleitung soll die Bildung der Bitfolge für die Zusammensetzung des Schaltcodes erklären. <br />
Wichtig zu wissen ist auch, dass es sich um einen 3state code handelt, d.h. jedes Bit kann '''0,1 oder F''' sein!<br />
<br />
Die selbst '''lernenden''' neue '''Geräte''' definiert man in FHEM so:<br />
<syntaxhighlight lang=text><br />
define <name> IT <26-Bit Adresse> <1-Bit Gruppen Bit> <4-Bit Gerät><br />
</syntaxhighlight><br />
Dabei kann man die 26-Bit Adresse frei wählen, so dass Kollisionen mit Nachbarn sehr unwahrscheinlich werden.<br />
Einen GRR-3500 der über einen CUL gesteuert werden soll definiert man z.B. so<br />
<syntaxhighlight lang=text><br />
define sw_it_outdoor IT 01010101010101010101010101 0 0000<br />
attr myITSwitch IODev CUL_0<br />
attr myITSwitch model itswitch<br />
</syntaxhighlight><br />
Danach die {{Taste|CODE}}-Taste am Funkschalter betätigen (die LED blinkt) und über FHEM den Einschaltcode senden.<br />
<br />
== Original Intertechno System ==<br />
<br />
Durch Kombination von Hauscode und Geräetecode können maximal 256 Geräte verwendet werden. Dannn würde allerdings alle Hauscodes belegt, was eventuell zu Störungen mit Nachbarinstallationen führen könnte.<br />
<br />
=== Hauscode (die ersten vier Stellen (0-3) ===<br />
Der Hauscode wird auf dem Drehschalter auf der Rückseite eingestellt und hat die Bezeichnung '''A-P'''<br />
<br />
[[File:Img_3324_small.png|thumb|Intertechno Schalter]]<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 0-3<br />
|-<br />
| A || 0000<br />
|-<br />
| B || F000<br />
|-<br />
| C || 0F00<br />
|-<br />
| D || FF00<br />
|-<br />
| E || 00F0<br />
|-<br />
| F || F0F0<br />
|-<br />
| G || 0FF0<br />
|-<br />
| H || FFF0<br />
|-<br />
| I || 000F<br />
|-<br />
| J || F00F<br />
|-<br />
| K || 0F0F<br />
|-<br />
| L || FF0F<br />
|-<br />
| M || 00FF<br />
|-<br />
| N || F0FF<br />
|-<br />
| O || 0FFF<br />
|-<br />
| P || FFFF<br />
|}<br />
<br />
=== Gruppen-/Gerätecode (Stelle 4-7) ===<br />
Der zweite Drehschalter ist mit den Zahlen von 1-16 beschriftet. Das ist eine Zusammensetzung von Gruppe und Gerätecode und ergibt die nächsten 4 Stellen. Die dritte Spalte in der Tabelle zeigt die Zuordnung einer Intertechno YCT-100 / ITS-150 Fernbedienung. Diese ist mit Drehschalter auf der Rückseite (A-P), einem Gruppenschalter (1-4) , und je vier ein-/aus-Tasten belegt.<br />
<br />
[[File:Img_3325_small.png|right|thumb|Intertechno Fernbedienung]]<br />
<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 4-7 !! Fernbedienung Gruppe/Taste<br />
|-<br />
| 01 || 0000 || 1 - 1<br />
|-<br />
| 02 || F000 || 1 - 2<br />
|-<br />
| 03 || 0F00 || 1 - 3<br />
|-<br />
| 04 || FF00 || 1 - 4<br />
|-<br />
| 05 || 00F0 || 2 - 1<br />
|-<br />
| 06 || F0F0 || 2 - 2<br />
|-<br />
| 07 || 0FF0 || 2 - 3<br />
|-<br />
| 08 || FFF0 || 2 - 4<br />
|-<br />
| 09 || 000F || 3 - 1<br />
|-<br />
| 10 || F00F || 3 - 2<br />
|-<br />
| 11 || 0F0F || 3 - 3<br />
|-<br />
| 12 || FF0F || 3 - 4<br />
|-<br />
| 13 || 00FF || 4 - 1<br />
|-<br />
| 14 || F0FF || 4 - 2<br />
|-<br />
| 15 || 0FFF || 4 - 3<br />
|-<br />
| 16 || FFFF || 4 - 4<br />
|}<br />
<br />
=== Stellen 8-9 (Festwert 0F) ===<br />
<nowiki>Die Positionen 8-9 sind immer fest auf '''0F'''zu stellen</nowiki><br />
<br />
=== Stellen 10-11 (Ein/Aus) ===<br />
Bei den beiden letzten Stellen steht als Codierung für ON = FF und OFF = F0.<br />
<br />
=== Beispiele ===<br />
Drehschalter/Hauscode auf '''A'''<br />
<nowiki> Schalter 1 -&gt; 000000000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 1)<br />
Schalter 2 -&gt; 0000F0000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 2)<br />
Schalter 3 -&gt; 00000F000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 3)<br />
Schalter 4 -&gt; 0000FF000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 4)</nowiki><br />
<br />
Drehschalter/Hauscode auf '''L'''<br />
<nowiki> Schalter 11 -&gt; FF0F0F0F0F FF F0 (entspricht Fernbedienung Gruppe III und Schalter 3)<br />
Schalter 16 -&gt; FF0FFFFF0F FF F0 (entspricht Fernbedienung Gruppe IV und Schalter 4)</nowiki><br />
komplett für die fhem cfg also z.B. Hauscode A und Gruppe 1 Gerät/Schalter 1 und CUL Bezeichnung CUL1:<br />
<br />
<nowiki> define schalter1 IT 000000000F FF F0<br />
attr schalter1 IODev CUL1<br />
attr schalter1 model itswitch</nowiki><br />
<br />
=== Selbstlernende Intertechno Funksteckdosen (z.B. ITR-1500) ===<br />
Die selbst lernenden Intertechno Funksteckdosen haben ein neues erweitertes Protokoll bei dem ein 32-Bit Wort gesendet wird. Sie sind aber weiterhin kompatibel zum bisherigen 12-Bit Protokoll. In der culfw wird das alte Protokoll mit "Intertechno V1" und das neue mit "Intertechno V3" bezeichnet.<br />
<br />
==== Mit altem Protokoll anlernen ====<br />
{{Randnotiz|RNTyp=Fehl|RNText=Schon aus Gründen der Störsicherheit ist davon abzuraten bei neuen selbst lernenden Intertechno Geräten den alten 12-Bit Code zu verwenden. Dieser wird nur unterstützt um rückwärts kompatibel zu sein.}}<br />
Zum Anlernen der selbst lernenden Funksteckdosen muss ein gültiger(!) ON-Befehl in den ersten fünf Sekunden nach dem Einstecken der Funksteckdose in eine normalen Steckdose gesendet werden. Die Funksteckdosen haben drei Speicherplätze, so dass man beispielsweise ein ITR-1500 Set zuerst mit der Fernbedienung anlernen und anschließend eigene Codes von FHEM senden lassen kann. Damit man einen gültigen Code sendet, sucht man sich einfach eine beliebige Kombination aus der obigen Tabelle aus (z.B. C-1, C-2 und C-3) und ergänzt entsprechend um die immer identischen Stellen 8 und 9 (0F) und den ON- und OFF-Code (FF/F0).<br />
Das Senden der Codes von FHEM erfolgt am einfachsten, indem man sich die Steckdosen vorher in der Konfiguration so anlegt, wie man sie haben möchte und anschließend über die Weboberfläche den ON-Befehl gibt.<br />
<br />
Mitunter funktioniert das reine Senden des ON Befehls aber nicht, da einige dieser Steckdosen einen längeren ON Befehl benötigen und die Sendedauer bei FHEM/CUL/CUNO nicht beeinflusst werden kann. In diesem Fall nimmt man eine YCT-100 oder ITS-150 Fernbedienung, an der die gewünschte Adresse eingestellt werden kann. Zum Anlernen drückt man nun etwas länger auf den passenden Einschaltknopf, danach kann die Dose von FHEM normal geschaltet werden.<br />
<br />
==== Angelernten Code löschen ====<br />
Hier gibt es zwei Möglichkeiten.<br />
# Man sendet wie beim Anlernen innerhalb der ersten 5 Sekunden einen OFF-Befehl. Die Funksteckdosen quittiert diesen mit zweimaligem einschalten. Anschließend reagiert sie auf diesen Code nicht mehr.<br />
# Manche neueren Intertechno Geräte (z.B. GRR-3500) haben eine {{Taste|CODE}}-Taste. Durch kurzes drücken wird die Funksteckdose für 5 Sekunden in den Betrieb zum Anlernen gesetzt. Hält man diese Taste bis die LED hektisch blinkt, lässt sie dann los und drückt sie noch einmal kurz, so wird der gesammte Speicher für angelernte Codes gelöscht. Die Funksteckdose quittiert das wie üblich durch zweimaliges Einschalten.<br />
<br />
==== Mit neuem Protokoll anlernen ====<br />
Die neuen Funksteckdosen können laut Werbung ''"67 Millionen verschiedene Codes"'', das sind 26-Bits (2^26 = 67108864). Da hat die Werbung tatsächlich mal untertrieben. Tatsächlich arbeitet das neue Protokoll mit einem 32-Bit Wort. Jede neue Fernbedienung (z.B. ITT-1500) bekommt ab Werk einen fest einprogrammierten (und hoffentlich weltweit eindeutigen) ID-Code aus 26 Bits. Daran hängt sie ein 2-Bit Kommando und eine 4-Bit Geräte bzw. Tastenpaar Nummer:<br />
{| class="wikitable" style="border-style:solid; border-width:4px"<br />
|-<br />
|style="border-style:solid; border-width:4px"| 26-Bit ID des steuernden Geräts (Fernbedienung)<br />
|style="border-style:solid; border-width:4px"| 2-Bit Kommando <br />
|style="border-style:solid; border-width:4px"| 4-Bit Kanal-ID (Tastenpaar)<br />
|-<br />
|}<br />
Das 2-Bit Kommando ist ein ON oder OFF Befehl an ein einzelnes Gerät oder eine Gruppe.<br />
{| class="wikitable"<br />
|-<br />
! Befehl !! Bedeutung<br />
|-<br />
| 0 0 || Ein Gerät einschalten<br />
|-<br />
| 0 1 || Ein Gerät ausschalten<br />
|-<br />
| 1 0 || Alle Geräte (dieser Gruppe) einschalten<br />
|-<br />
| 1 1 || Alle Geräte (dieser Gruppe) ausschalten<br />
|-<br />
|}<br />
Die ITT-1500 hat zwar eine {{Taste|ALL OFF}}-Taste aber keine {{Taste|ALL ON}}.<br />
Ob das Einschalten als Gruppe generell unterstützt wird ist nicht bekannt.<br />
Einen gültiger Einschaltbefehl kann man am [[CUL]] z.B. mit diesem Kommando senden:<br />
<syntaxhighlight lang=text><br />
is01010010101011101000000110010011<br />
</syntaxhighlight><br />
Im Gegensatz zum alten Protokoll (Intertechno V1) wird das Binärwort hier nicht mit 0 und '''F''' sondern 0 und '''1''' gesendet.<br />
{| class="wikitable" style="border-style:solid; border-width:4px"<br />
|-<br />
|style="border-style:solid; border-width:4px"| '''is''' ''(Sende Intertechno Kommando)''<br />
|style="border-style:solid; border-width:4px"| '''01010010101011101000000110''' ''(Gerätecode Fernbedienung)''<br />
|style="border-style:solid; border-width:4px"| '''01''' ''(Kommando ON)''<br />
|style="border-style:solid; border-width:4px"| '''0011''' ''(Tastenpaar 4)''<br />
|-<br />
|}<br />
Die culfw unterscheidet anhand der Kommandolänge ob es sich um einen alten (12 Zeichen) oder neuen (32 Zeichen) Intertechno Befehl handelt.<br />
Genauso unterscheidet das IT-Modul in FHEM die beiden Formate:<br />
define <name> IT <10-bit-housecode> <off-code> <on-code> [<dimup-code>] [<dimdown-code>]<br />
und <br />
define <name> IT <26 bit Address> <1 bit group bit> <4 bit unit><br />
und setzt das Reading <code>protocol</code> auf <code>V3</code>.<br />
<br />
== FLS 100 ==<br />
[[File:FLS100.jpg|right|thumb|FLS100 - konfiguriert auf IV/3]]<br />
<br />
Beim FLS 100 von m-e.de gibt es nur 4 mögliche Einstellungen: '''I, II, III und IV'''. Dies entspricht der Gruppe auf der Fernbedienung.<br />
<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 0-3<br />
|-<br />
| I || 0FFF <br />
|-<br />
| II || F0FF<br />
|-<br />
| III || FF0F<br />
|-<br />
| IV || FFF0<br />
|}<br />
<br />
Die nächsten vier Stellen geben die Geräte ID an; diese ist identisch mit der Taste an der Fernbedienung.<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 4-7 !! Fernbedienung Taste<br />
|-<br />
| 1 || 0FFF || 1<br />
|-<br />
| 2 || F0FF || 2<br />
|-<br />
| 3 || FF0F || 3<br />
|-<br />
| 4 || FFF0 || 4<br />
|}<br />
<br />
Beim FLS 100 ist nur die letzte Stelle relevant, mit ON: F oder OFF: 0<br />
<br />
== Renkforce RSL366R ==<br />
Die Renkfoce (Typ RSL366R) Funksteckdosen sind baugleich der oben genannten FLS 100.<br />
Bei Conrad auch im Set mit Artikel Nummer 1208454 zu finden. Stand 2017-12-03<br />
<br />
Folgende Einstellungen haben sich bei mir als Funktionsfähig erwiesen:<br />
(Achtung 0FFF0FFF muss auf die Einstellungen am Drehschalter siehe oben angepasst werden)<br />
Erste 4 Stellen sind der FB Gruppe und die darauf folgenden 4 Stellen sind die Ferbedienungstaste<br />
<br />
<nowiki> define Renkforce IT 0FFF0FFF FFFF 0000<br />
attr model itswitch<br />
attr ITrepetition 15</nowiki><br />
<br />
ITrepetition ist auszuprobieren, wann die Steckdose zuverlässig schaltet. Bei mir war es der Wert 15<br />
<br />
Nachteil: Es können Maximal 16 Funksteckdosen dieses Typs einsetzbar.<br />
Es gibt keine Rückkanal.<br />
<br />
== REV Telecontrol ==<br />
[[File:Rev-funksteckdose-telecontrol-3500-w-008345.png|right|thumb|REV Telecontrol]]<br />
<br />
Die REV Telecontrol haben einen Dreh-Wahlschalter auf der Rückseite, mit dem sich der Hauscode (A - D) und der Gerätecode (1 - 3) bestimmen lässt. <br />
<br />
Die Codierung ist dabei:<br />
{| class="wikitable"<br />
! Hauscode !! Stelle 1-4<br />
|-<br />
| A || 1FFF<br />
|-<br />
| B || F1FF<br />
|-<br />
| C || FF1F<br />
|-<br />
| D || FFF1<br />
|}<br />
<br />
{| class="wikitable"<br />
! Gerätecode !! Stelle 5-7<br />
|-<br />
| 1 || 1FF<br />
|-<br />
| 2 || F1F<br />
|-<br />
| 3 || FF1<br />
|}<br />
<br />
Dazu (Stelle 8+9+10) noch drei statische Werte: 0FF.<br />
<br />
Der Code für '''An''' ist FF, für '''Aus''' 00.<br />
<br />
Beispiel: <br />
:<code>define My_Switch IT 1FFF1FF0FF FF 00 für A1</code><br />
Erfolgreich getestet mit CULfw V 1.49 CUL868.<br />
<br />
== Elro AB440 ==<br />
=== Möglichkeit 1: zu Intertechno-Codes umdippen ===<br />
[[File:ELRO-AB440_Funkschalter.jpg|right|thumb|Élro AB440 Funkschalter]]<br />
<br />
Günstige ELRO Funkschalter/Dimmer der Serie 440 lassen sich auch problemlos auf Intertechno Codierung "umdippen" und damit voll kompatibel mit allen möglichen A-P / 1-16 Intertechno Schaltcodes von FHEM aus nutzen. Dazu müssen die Dipschalter-Stellungen entsprechend Intertechno umgerechnet und gesetzt werden (1=ON, 0=OFF). <br />
<br />
Beispiele:<br />
{| class="wikitable"<br />
! Intertechno !! Elro Hauscode<br>1234 !! Elro Gerätecode<br>5ABCDE <br />
|-<br />
| A1 || 1111 || 111110 <br />
|-<br />
| A2 || 1111 || 011110 <br />
|-<br />
| A3 || 1111 || 101110 <br />
|-<br />
| A4 || 1111 || 001110 <br />
|-<br />
| A5 || 1111 || 110110 <br />
|-<br />
| A6 || 1111 || 010110 <br />
|-<br />
| A7 || 1111 || 100110 <br />
|-<br />
| A8 || 1111 || 000110 <br />
|-<br />
| A9 || 1111 || 111010 <br />
|-<br />
| A10 || 1111 || 011010 <br />
|-<br />
| A16 || 1111 || 000010 <br />
|-<br />
| C1 || 1011 || 111110 <br />
|-<br />
| C2 || 1011 || 011110 <br />
|}<br />
<br />
Weitere Erklärungen sind z.B. im [http://isn-systems.com/tools/it2elro Tool] der Fa. ISN-systems online berechnen lassen.<br />
<br />
Einziger Nachteil: Die originale Elro Fernbedienung funktioniert dann nicht mehr uneingeschränkt mit den Funkschaltern (eine Intertechno Fernbedienung funktioniert uneingeschränkt). Wenn man den Hauscode an der Fernbedienung einstellt, kann man durch drücken von z.T. mehreren Tasten gleichzeitig auch Intertechno schalten. Das ist aber nur was für den Notfall oder für Handakrobaten.<br />
<br />
<nowiki>15/16 -&gt; D<br />
13/14 -&gt; A+D<br />
11/12 -&gt; B+D<br />
09/10 -&gt; A+B+D<br />
07/08 -&gt; C+D<br />
05/06 -&gt; A+C+D<br />
03/04 -&gt; B+C+D<br />
01/02 -&gt; A+B+C+D</nowiki><br />
<br />
=== Möglichkeit 2: aus der vorhanden DIP-Schalterstellung den entsprechenden 10-digit InterTechno Code bestimmen ===<br />
Das ist prinzipiell ganz einfach. Hat man folgende DIP-Schalter-Stellung so muss man von links nach rechts einfach für jeden DIP gleich "ON" eine "0" und für "OFF" ein "F" definieren. Für die dargestellte DIP-Einstellung ergibt sich der damit der darunterstehende InterTechno Code:<br />
<br />
[[File:ELRO_0100101111.png]]<br />
<br />
<code>0F00F0FFFF</code><br />
<br />
Analog dazu ergeben sich für den gleichen Hauscode (Schalter 1-5) folgende Codes für die Funksteckdosen B bis E, wobei die Dose E mit der Originalfernbedienung nicht adressierbar ist, sich mit FHEM aber wunderbar schalten lässt.<br />
<br />
[[File:ELRO_0100110111.png]]<br />
<br />
<code>0F00FF0FFF</code><br />
<br />
[[File:ELRO_0100111011.png]]<br />
<br />
<code>0F00FFF0FF</code><br />
<br />
[[File:ELRO_0100111101.png]]<br />
<br />
<code>0F00FFFF0F</code><br />
<br />
[[File:ELRO_0100111110.png]]<br />
<br />
<code>0F00FFFFF0</code><br />
<br />
Dazu noch die Codes für AN = FF und AUS = F0 schaut eine vollständige Definition eines ELRO440 Funkschalters dann bsw. so aus:<br />
<br />
<nowiki> define ELRO_10110_A IT 0F00F0FFFF FF F0<br />
attr ELRO_10110_A IODev CUL_0<br />
attr ELRO_10110_A alias Stehlampe<br />
attr ELRO_10110_A fp_Grundriss 340,50,1,Stehlampe<br />
attr ELRO_10110_A group Schalter<br />
attr ELRO_10110_A model itswitch<br />
attr ELRO_10110_A room Wohnzimmer</nowiki><br />
<br />
[[File:b1-Funksteckdose-von-Toom.jpg|right|thumb|b1 Funksteckdose von Toom]]<br />
== b1 / Toom ==<br />
Das "Funksteckdosen-Set" der Marke b1 aus dem Toom-Baumarkt (3 Funksteckdosen + 1 Fernbedienung mit 4x ein/aus) funktioniert exakt wie ELRO, auch die DIP-Schalter sind genauso belegt. <br />
<br />
== Wetekom/Westfalia ==<br />
[[File:Westfalia-Funksteckdose.jpg|right|thumb|Westfalia Funksteckdose ZTC-S316A.]]<br />
Der eingestellte Hauscode ist F00F0FFF0F.<br />
<br />
In den Westfalia-Baumärkten gibt es Funksteckdosen mit Westfalia-Branding. Auf der Bedienungsanleitung steht aber Wetekom.<br />
<br />
Die Funksteckdosen selbst haben zehn DIP-Switches: 1234FEDCBA, während die Fernbedienung nur sechs hat: ABCDEF. Damit die Fernbedienung mit den Funksteckdosen funktioniert, darf man nur einen der DIP-Switches 1234 pro Funksteckdose auf ON schalten.<br />
<br />
Die Schaltung der DIP-Switches ABCDEF4321 entspricht direkt und in dieser Reihenfolge (also andersrum als direkt an der Funksteckdose) dem Hauscode und zwar entspricht ein Switch auf OFF einem F im Hauscode und ein Switch auf ON einer 0 im Hauscode.<br />
<br />
Die Steckdosen werden dann mit 01 ein- und mit 10 ausgeschaltet.<br />
<br />
Beispiel:<br />
define wf_steckdose IT F00F0FFF0F 01 10<br />
<br />
== Pollin Funksteckdosen ==<br />
<br />
Vom Aussehen sind die Steckdosen von Pollin (z.B. 3fach Set 550666) mit den Westfalia ZTC identisch, aber:<br />
<br />
* die DIP Schalter sind beschriftet von 0 bis 10;<br />
* der Adresscode entspricht dem invertierten ELRO 440 Code ->also (0=ON, 1=OFF)<br />
* der Code für "An" ist 0F, für "Aus" F0<br />
<br />
Beispiel für Adresse C2:<br />
<br />
define IT_C2 IT 0F00F0000F 0F F0<br />
<br />
== me micro-electric AS 73 ==<br />
<br />
[[Datei:Me_AS_73.JPG|right|thumb|micro-electric Funksteckdose AS 73]]<br />
<br />
Die micro-electric Funksteckdosen haben 10 DIP-Schalter: 123456ABCD.<br />
<br />
Der Hauscode wird an Sender und Steckdose mit 1-6 eingestellt, der Empfängercode A-D entspricht den Kanälen auf dem Handsender.<br />
<br />
DIP-Schalterstellung OFF entspricht F und ON entspricht 0.<br />
<br />
Die Steckdosen werden mit F0 ein- und mit 0F ausgeschaltet.<br />
<br />
Empfängercodes:<br />
{| class="wikitable"<br />
! Kanal !! Position 7-10<br />
|- <br />
| A || 0FFF <br />
|-<br />
| B || F0FF <br />
|-<br />
| C || FFF0 (Achtung: bei C und D sind die Codes vertauscht) <br />
|-<br />
| D || FF0F <br />
|}<br />
<br />
Beispiel:<br />
:<code>define Schalter_ME_A IT 0F0F000FFF F0 0F</code><br />
:<code>attr Schalter_ME_A IODev CUL1</code><br />
:<code>attr Schalter_ME_A model itswitch</code><br />
<br />
== Conrad / McPower Funkschaltset 3+1 ==<br />
Dieses Funkschaltset wird unter mehreren Namen in verschiedenen Bau- und Heimwerkermärkten sowie bei Conrad (Best Nr. 640475 - 62) vertrieben. Teilweise auch mit unterschiedlichen Schaltleistungen.<br />
Die Konfiguration funktioniert genauso wie beim [[Intertechno_Code_Berechnung#FLS_100|FLS100]]<br />
<br />
== CMI / OBI / LUX IP44-Funkschaltset 2+1 ==<br />
[[File:RCS_14G_Funksteckdose_Obi_klein.png|right|thumb|Rückansicht der OBI / Lux Funksteckdose]]<br />
Dieses Set wird u.a. bei OBI verkauft, als Hersteller wird die Emil Lux GmbH angegeben. Typennummer RCS-14G, Artikel Nummer 308555<br />
Die Steckdosen sind IP44 geschützt und damit auch für den Außeneinsatz geeignet.<br />
Die Steckdosen verfügen lediglich über einen Kanal-Schalter von 1-4. Diese Kanal-Nummeren korrespondieren mit der folgenden Übersetzung:<br />
<br />
{| class="wikitable"<br />
! Kanal !! Code (Stelle 1-10)<br />
|- <br />
| 1 || 000FF0F0FF <br />
|-<br />
| 2 || 000FFF00FF <br />
|-<br />
| 3 || 000F0FF0FF <br />
|-<br />
| 4 || 0000FFF0FF <br />
|}<br />
<br />
Die Steckdosen werden dann mit FF ein- und mit F0 ausgeschaltet.<br />
<br />
Beispiel:<br />
:<code>define Schalter_OBI_Code_1 IT 000FF0F0FF FF F0</code><br />
:<code>attr Schalter_OBI_Code_1 IODev CUL1</code><br />
:<code>attr Schalter_OBI_Code_1 model itswitch</code><br />
<br />
<br />
== Noch nicht aufgeführte Geräte ==<br />
Wer ein Intertechno-ähnliches Gerät besitzt, das in dieser Liste noch nicht aufgeführt ist, muss die Kodierung selbst bestimmen. Dazu gibt es verschiedene Möglichkeiten, die in diesem Abschnitt aufgeführt werden. Die Ergebnisse bitte hier eintragen, um Nachfolgern die Arbeit zu ersparen!<br />
<br />
=== Audio-Eingang zur Messung ===<br />
Hier wird die Fernbedienung oder der Empfänger mit einer entsprechenden Schaltung an den Mikrofon-Eingang eines Rechners angeschlossen und mit einem Audio-Programm werden die Signalverläufe aufgenommen. Diese Methode wird [http://avr.börke.de/E-Funk.htm hier] näher erläutert.<br />
<br />
=== Platine analysieren ===<br />
[[File:Westfalia-Funkfernbedienung-hinten.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von hinten.]]<br />
[[File:Westfalia-Funkfernbedienung-vorne.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von vorne.]]<br />
<br />
Platine der Fernbedienung oder des Empfängers betrachten und so die Beschaltung des Decoder/Encoder Chips ermitteln. Bei der Wetekom-Fernbedienung wird beispielsweise der Chip LP801b verwendet, der funktional identisch zum PT2262 ist. Im [http://www.escol.com.my/Datasheets_specs/pt2262_1.pdf Datenblatt des PT2262] kann man dann die Beschaltung nachsehen. Nun betrachtet man den Verlauf der Leiterbahnen auf der Platine, um die Beschaltung des Chips zu ermitteln. So kann man beispielsweise bei der Wetekom-Fernbedienung sehen, dass die DIP-Switches A bis F auf die Eingänge A0 bis A5 geschaltet sind. Außerdem sieht man, mit welchen Eingängen die einzelnen Taster verbunden sind.<br />
<br />
Nun kann man messen, zwischen welchen Chip-Eingängen und Batteriepolen eine Spannung anliegt, bzw. (ohne Batterie) zwischen welchen Chip-Eingängen und Batteriepolen es einen Durchgang gibt, um zu ermitteln, wie die DIP-Switches schalten. Im Fall der Wetekom-Fernbedienung liegt keine Spannung zwischen den Eingängen und den beiden Batteriepolen an, wenn die DIP-Switches auf OFF stehen: Der Eingang liegt also auf F (Float). Wenn die DIP-Switches auf ON stehen, liegt nur eine Spannung zwischen dem Pluspol der Batterie und dem Eingang an, es gibt also einen Durchgang zwischen dem Minuspol und dem Eingang, so dass der Eingang auf V_SS liegt und damit 0 eingestellt ist.<br />
<br />
Bei den Eingängen D0 und D1 sieht man, dass der Batterie-Pluspol immer über einen Widerstand mit dem Dateneingang verbunden ist, also normalerweise 1 anliegt. Ist aber ein Ein-Taster gedrückt, wird der Eingang D1 direkt mit dem Minuspol der Batterie verbunden, bei den Aus-Tastern der Eingang D0 (die Verbindung der Aus-Taster ist auf den Bildern nicht besonders gut zu erkennen). Durch diese Verbindung wird der Eingang auf V_SS heruntergezogen und damit ist 0 eingestellt.<br />
<br />
=== Mit [[CUL]] im Debug-Modus Rohsignale empfangen und analysieren ===<br />
* Wurde im {{Link2Forum|Topic=5599|LinkText=Forum}} diskutiert.<br />
Ein 433MHz CUL kann mit dem Befehl <code>X67</code> Intertechno Kommandos mitlesen.<br />
Allerdings funktioniert das bei der "üblichen" Firmware nur lückenhaft.<br />
Dazu wurde bereits eine spezielle Variante der culfw entwickelt (siehe {{Link2Forum|Topic=24436|Message=105|LinkText=Forum}}).<br />
Die Ausgaben sind aber dann als doppelt so langes Binärwort im Hex-Format.<br />
Man muss quasi jedes zweite Bit streichen, da die einzelnen Bits als steigende bzw. fallende Flanken übertragen werden.<br />
Man kann aber damit auch einer neuen ITT-1500 ihre Kommandos und vor allem ihre 26-Bit ID entlocken.<br />
<br />
==== Mit CUL868 433MHz mitlesen ====<br />
Man kann auch mit der 868MHz Version des CUL Fernbedienungen von Intertechno mitlesen.<br />
Dazu die gewünschte Trägerfrequenz 433.92MHz * 2^16 / 26MHz = 1093745 = 0x10B071 als 24-Bit Teiler in die Register <code>FREQ[2-0]</code> schreiben und einen Reset ausführen.<br />
W0F10<br />
W10B0<br />
W1171<br />
B<br />
Danach kann man mit <code>X67</code> auf der Frequenz mitlesen. Mit <code>e</code> kann der EEPROM wieder auf den Default 0x21656A, 868.30MHz gestellt werden.<br />
<br />
[[Kategorie:Intertechno]]<br />
[[Kategorie:HOWTOS]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&diff=23442Intertechno Code Berechnung2017-12-03T13:12:05Z<p>No Legend: Rennforce Infos hinzu</p>
<hr />
<div>'''Intertechno''' Systemkomponenten sind kostengünstige und weit verbreitete Funkschalter/-dimmer im 433 MHz Bereich, die man in fast jedem Baumarkt unter den Markennamen Intertechno, düwi, KlikAanKlikUit usw. erhalten kann. <br />
<br />
Es gibt eine Anzahl weiterer Hersteller/Handelsmarken mit ähnlicher Kodierung oder Einstellmöglichkeiten mit DIP Schaltern, die ebenfalls mit dem Intertechno Code geschaltet werden können. Dazu zählen von Usern bereits erfolgreich getestete Geräte von Elro AB440, FLS-100/m-e, Wetekom/Westfalia und weitere, theoretisch mögliche aber ungetestete Systeme wie Unitec oder Arctech Steckdosen (siehe [http://avr.börke.de/E-Funk.htm Börkes-HP])<br />
<br />
== Voraussetzungen in FHEM ==<br />
Schalten kann man die Intertechno Funkkomponenten in FHEM über verschiedene Wege. So z.B. über CUL/CUNO, Tellstick, [[AVR-NET-IO]].<br />
<br />
Hier beschrieben ist die Ansteuerung über CUL/CUNO, dessen Firmware für Intertechno erweitert wurde (Danke an Olaf Droegehorn). Momentan ist in CUL/CUNO das SENDEN von Intertechno Funk implementiert. Die Firmware muss mindestens den Stand 1.44 haben (Kontrolle der Version in den FHEM Detaildaten zum [[CUL]]/[[CUNO]]). Die CUL433/CUNO433 haben dabei volle Reichweite, die Versionen CUL868/CUNO868 funktionieren ebenfalls, haben aufgrund der nicht optimalen Antennenlänge und falschen Abstimmung für den Frequenzbereich aber nur eine eingeschränke Reichweite.<br />
<br />
=== Definition ===<br />
Die Definition des IT Gerätes in FHEM sieht für '''alte Geräte''' so aus:<br />
<syntaxhighlight lang=text><br />
define myITSwitch IT <housecode><group_switch> <on-code> <off-code> [<dimup-code> <dimdown-code>]<br />
attr myITSwitch IODev CUL_x (CUNO_x)<br />
attr myITSwitch model itswitch<br />
</syntaxhighlight><br />
Die weitere Anleitung soll die Bildung der Bitfolge für die Zusammensetzung des Schaltcodes erklären. <br />
Wichtig zu wissen ist auch, dass es sich um einen 3state code handelt, d.h. jedes Bit kann '''0,1 oder F''' sein!<br />
<br />
Die selbst '''lernenden''' neue '''Geräte''' definiert man in FHEM so:<br />
<syntaxhighlight lang=text><br />
define <name> IT <26-Bit Adresse> <1-Bit Gruppen Bit> <4-Bit Gerät><br />
</syntaxhighlight><br />
Dabei kann man die 26-Bit Adresse frei wählen, so dass Kollisionen mit Nachbarn sehr unwahrscheinlich werden.<br />
Einen GRR-3500 der über einen CUL gesteuert werden soll definiert man z.B. so<br />
<syntaxhighlight lang=text><br />
define sw_it_outdoor IT 01010101010101010101010101 0 0000<br />
attr myITSwitch IODev CUL_0<br />
attr myITSwitch model itswitch<br />
</syntaxhighlight><br />
Danach die {{Taste|CODE}}-Taste am Funkschalter betätigen (die LED blinkt) und über FHEM den Einschaltcode senden.<br />
<br />
== Original Intertechno System ==<br />
<br />
Durch Kombination von Hauscode und Geräetecode können maximal 256 Geräte verwendet werden. Dannn würde allerdings alle Hauscodes belegt, was eventuell zu Störungen mit Nachbarinstallationen führen könnte.<br />
<br />
=== Hauscode (die ersten vier Stellen (0-3) ===<br />
Der Hauscode wird auf dem Drehschalter auf der Rückseite eingestellt und hat die Bezeichnung '''A-P'''<br />
<br />
[[File:Img_3324_small.png|thumb|Intertechno Schalter]]<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 0-3<br />
|-<br />
| A || 0000<br />
|-<br />
| B || F000<br />
|-<br />
| C || 0F00<br />
|-<br />
| D || FF00<br />
|-<br />
| E || 00F0<br />
|-<br />
| F || F0F0<br />
|-<br />
| G || 0FF0<br />
|-<br />
| H || FFF0<br />
|-<br />
| I || 000F<br />
|-<br />
| J || F00F<br />
|-<br />
| K || 0F0F<br />
|-<br />
| L || FF0F<br />
|-<br />
| M || 00FF<br />
|-<br />
| N || F0FF<br />
|-<br />
| O || 0FFF<br />
|-<br />
| P || FFFF<br />
|}<br />
<br />
=== Gruppen-/Gerätecode (Stelle 4-7) ===<br />
Der zweite Drehschalter ist mit den Zahlen von 1-16 beschriftet. Das ist eine Zusammensetzung von Gruppe und Gerätecode und ergibt die nächsten 4 Stellen. Die dritte Spalte in der Tabelle zeigt die Zuordnung einer Intertechno YCT-100 / ITS-150 Fernbedienung. Diese ist mit Drehschalter auf der Rückseite (A-P), einem Gruppenschalter (1-4) , und je vier ein-/aus-Tasten belegt.<br />
<br />
[[File:Img_3325_small.png|right|thumb|Intertechno Fernbedienung]]<br />
<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 4-7 !! Fernbedienung Gruppe/Taste<br />
|-<br />
| 01 || 0000 || 1 - 1<br />
|-<br />
| 02 || F000 || 1 - 2<br />
|-<br />
| 03 || 0F00 || 1 - 3<br />
|-<br />
| 04 || FF00 || 1 - 4<br />
|-<br />
| 05 || 00F0 || 2 - 1<br />
|-<br />
| 06 || F0F0 || 2 - 2<br />
|-<br />
| 07 || 0FF0 || 2 - 3<br />
|-<br />
| 08 || FFF0 || 2 - 4<br />
|-<br />
| 09 || 000F || 3 - 1<br />
|-<br />
| 10 || F00F || 3 - 2<br />
|-<br />
| 11 || 0F0F || 3 - 3<br />
|-<br />
| 12 || FF0F || 3 - 4<br />
|-<br />
| 13 || 00FF || 4 - 1<br />
|-<br />
| 14 || F0FF || 4 - 2<br />
|-<br />
| 15 || 0FFF || 4 - 3<br />
|-<br />
| 16 || FFFF || 4 - 4<br />
|}<br />
<br />
=== Stellen 8-9 (Festwert 0F) ===<br />
<nowiki>Die Positionen 8-9 sind immer fest auf '''0F'''zu stellen</nowiki><br />
<br />
=== Stellen 10-11 (Ein/Aus) ===<br />
Bei den beiden letzten Stellen steht als Codierung für ON = FF und OFF = F0.<br />
<br />
=== Beispiele ===<br />
Drehschalter/Hauscode auf '''A'''<br />
<nowiki> Schalter 1 -&gt; 000000000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 1)<br />
Schalter 2 -&gt; 0000F0000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 2)<br />
Schalter 3 -&gt; 00000F000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 3)<br />
Schalter 4 -&gt; 0000FF000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 4)</nowiki><br />
<br />
Drehschalter/Hauscode auf '''L'''<br />
<nowiki> Schalter 11 -&gt; FF0F0F0F0F FF F0 (entspricht Fernbedienung Gruppe III und Schalter 3)<br />
Schalter 16 -&gt; FF0FFFFF0F FF F0 (entspricht Fernbedienung Gruppe IV und Schalter 4)</nowiki><br />
komplett für die fhem cfg also z.B. Hauscode A und Gruppe 1 Gerät/Schalter 1 und CUL Bezeichnung CUL1:<br />
<br />
<nowiki> define schalter1 IT 000000000F FF F0<br />
attr schalter1 IODev CUL1<br />
attr schalter1 model itswitch</nowiki><br />
<br />
=== Selbstlernende Intertechno Funksteckdosen (z.B. ITR-1500) ===<br />
Die selbst lernenden Intertechno Funksteckdosen haben ein neues erweitertes Protokoll bei dem ein 32-Bit Wort gesendet wird. Sie sind aber weiterhin kompatibel zum bisherigen 12-Bit Protokoll. In der culfw wird das alte Protokoll mit "Intertechno V1" und das neue mit "Intertechno V3" bezeichnet.<br />
<br />
==== Mit altem Protokoll anlernen ====<br />
{{Randnotiz|RNTyp=Fehl|RNText=Schon aus Gründen der Störsicherheit ist davon abzuraten bei neuen selbst lernenden Intertechno Geräten den alten 12-Bit Code zu verwenden. Dieser wird nur unterstützt um rückwärts kompatibel zu sein.}}<br />
Zum Anlernen der selbst lernenden Funksteckdosen muss ein gültiger(!) ON-Befehl in den ersten fünf Sekunden nach dem Einstecken der Funksteckdose in eine normalen Steckdose gesendet werden. Die Funksteckdosen haben drei Speicherplätze, so dass man beispielsweise ein ITR-1500 Set zuerst mit der Fernbedienung anlernen und anschließend eigene Codes von FHEM senden lassen kann. Damit man einen gültigen Code sendet, sucht man sich einfach eine beliebige Kombination aus der obigen Tabelle aus (z.B. C-1, C-2 und C-3) und ergänzt entsprechend um die immer identischen Stellen 8 und 9 (0F) und den ON- und OFF-Code (FF/F0).<br />
Das Senden der Codes von FHEM erfolgt am einfachsten, indem man sich die Steckdosen vorher in der Konfiguration so anlegt, wie man sie haben möchte und anschließend über die Weboberfläche den ON-Befehl gibt.<br />
<br />
Mitunter funktioniert das reine Senden des ON Befehls aber nicht, da einige dieser Steckdosen einen längeren ON Befehl benötigen und die Sendedauer bei FHEM/CUL/CUNO nicht beeinflusst werden kann. In diesem Fall nimmt man eine YCT-100 oder ITS-150 Fernbedienung, an der die gewünschte Adresse eingestellt werden kann. Zum Anlernen drückt man nun etwas länger auf den passenden Einschaltknopf, danach kann die Dose von FHEM normal geschaltet werden.<br />
<br />
==== Angelernten Code löschen ====<br />
Hier gibt es zwei Möglichkeiten.<br />
# Man sendet wie beim Anlernen innerhalb der ersten 5 Sekunden einen OFF-Befehl. Die Funksteckdosen quittiert diesen mit zweimaligem einschalten. Anschließend reagiert sie auf diesen Code nicht mehr.<br />
# Manche neueren Intertechno Geräte (z.B. GRR-3500) haben eine {{Taste|CODE}}-Taste. Durch kurzes drücken wird die Funksteckdose für 5 Sekunden in den Betrieb zum Anlernen gesetzt. Hält man diese Taste bis die LED hektisch blinkt, lässt sie dann los und drückt sie noch einmal kurz, so wird der gesammte Speicher für angelernte Codes gelöscht. Die Funksteckdose quittiert das wie üblich durch zweimaliges Einschalten.<br />
<br />
==== Mit neuem Protokoll anlernen ====<br />
Die neuen Funksteckdosen können laut Werbung ''"67 Millionen verschiedene Codes"'', das sind 26-Bits (2^26 = 67108864). Da hat die Werbung tatsächlich mal untertrieben. Tatsächlich arbeitet das neue Protokoll mit einem 32-Bit Wort. Jede neue Fernbedienung (z.B. ITT-1500) bekommt ab Werk einen fest einprogrammierten (und hoffentlich weltweit eindeutigen) ID-Code aus 26 Bits. Daran hängt sie ein 2-Bit Kommando und eine 4-Bit Geräte bzw. Tastenpaar Nummer:<br />
{| class="wikitable" style="border-style:solid; border-width:4px"<br />
|-<br />
|style="border-style:solid; border-width:4px"| 26-Bit ID des steuernden Geräts (Fernbedienung)<br />
|style="border-style:solid; border-width:4px"| 2-Bit Kommando <br />
|style="border-style:solid; border-width:4px"| 4-Bit Kanal-ID (Tastenpaar)<br />
|-<br />
|}<br />
Das 2-Bit Kommando ist ein ON oder OFF Befehl an ein einzelnes Gerät oder eine Gruppe.<br />
{| class="wikitable"<br />
|-<br />
! Befehl !! Bedeutung<br />
|-<br />
| 0 0 || Ein Gerät einschalten<br />
|-<br />
| 0 1 || Ein Gerät ausschalten<br />
|-<br />
| 1 0 || Alle Geräte (dieser Gruppe) einschalten<br />
|-<br />
| 1 1 || Alle Geräte (dieser Gruppe) ausschalten<br />
|-<br />
|}<br />
Die ITT-1500 hat zwar eine {{Taste|ALL OFF}}-Taste aber keine {{Taste|ALL ON}}.<br />
Ob das Einschalten als Gruppe generell unterstützt wird ist nicht bekannt.<br />
Einen gültiger Einschaltbefehl kann man am [[CUL]] z.B. mit diesem Kommando senden:<br />
<syntaxhighlight lang=text><br />
is01010010101011101000000110010011<br />
</syntaxhighlight><br />
Im Gegensatz zum alten Protokoll (Intertechno V1) wird das Binärwort hier nicht mit 0 und '''F''' sondern 0 und '''1''' gesendet.<br />
{| class="wikitable" style="border-style:solid; border-width:4px"<br />
|-<br />
|style="border-style:solid; border-width:4px"| '''is''' ''(Sende Intertechno Kommando)''<br />
|style="border-style:solid; border-width:4px"| '''01010010101011101000000110''' ''(Gerätecode Fernbedienung)''<br />
|style="border-style:solid; border-width:4px"| '''01''' ''(Kommando ON)''<br />
|style="border-style:solid; border-width:4px"| '''0011''' ''(Tastenpaar 4)''<br />
|-<br />
|}<br />
Die culfw unterscheidet anhand der Kommandolänge ob es sich um einen alten (12 Zeichen) oder neuen (32 Zeichen) Intertechno Befehl handelt.<br />
Genauso unterscheidet das IT-Modul in FHEM die beiden Formate:<br />
define <name> IT <10-bit-housecode> <off-code> <on-code> [<dimup-code>] [<dimdown-code>]<br />
und <br />
define <name> IT <26 bit Address> <1 bit group bit> <4 bit unit><br />
und setzt das Reading <code>protocol</code> auf <code>V3</code>.<br />
<br />
== FLS 100 ==<br />
[[File:FLS100.jpg|right|thumb|FLS100 - konfiguriert auf IV/3]]<br />
<br />
Beim FLS 100 von m-e.de gibt es nur 4 mögliche Einstellungen: '''I, II, III und IV'''. Dies entspricht der Gruppe auf der Fernbedienung.<br />
<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 0-3<br />
|-<br />
| I || 0FFF <br />
|-<br />
| II || F0FF<br />
|-<br />
| III || FF0F<br />
|-<br />
| IV || FFF0<br />
|}<br />
<br />
Die nächsten vier Stellen geben die Geräte ID an; diese ist identisch mit der Taste an der Fernbedienung.<br />
{| class="wikitable"<br />
! Drehschalter !! Stelle 4-7 !! Fernbedienung Taste<br />
|-<br />
| 1 || 0FFF || 1<br />
|-<br />
| 2 || F0FF || 2<br />
|-<br />
| 3 || FF0F || 3<br />
|-<br />
| 4 || FFF0 || 4<br />
|}<br />
<br />
Beim FLS 100 ist nur die letzte Stelle relevant, mit ON: F oder OFF: 0<br />
<br />
== Renkforce RSL366R ==<br />
Die Renkfoce (Typ RSL366R) Funksteckdosen sind baugleich der oben genannten FLS 100.<br />
Bei Conrad auch im Set mit Artikel Nummer 1208454 zu finden. Stand 2017-12-03<br />
<br />
Folgende Einstellungen haben sich bei mir als Funktionsfähig erwiesen:<br />
(Achtung 0FFF0FFF muss auf die Einstellungen am Drehschalter siehe oben angepasst werden)<br />
Erste 4 Stellen sind der FB Gruppe und die darauf folgenden 4 Stellen sind die Ferbedienungstaste<br />
<br />
<nowiki> define Renkforce IT 0FFF0FFF FFFF 0000<br />
attr model itswitch<br />
attr ITrepetition 15</nowiki><br />
<br />
ITrepetition ist auszuprobieren, wann die Steckdose zuverlässig schaltet. Bei mir war es der Wert 15<br />
<br />
Nachteil: Es können Maximal 16 Funksteckdosen dieses Typs einsetzbar.<br />
Es gibt keine Rückkanal.<br />
<br />
== REV Telecontrol ==<br />
[[File:Rev-funksteckdose-telecontrol-3500-w-008345.png|right|thumb|REV Telecontrol]]<br />
<br />
Die REV Telecontrol haben einen Dreh-Wahlschalter auf der Rückseite, mit dem sich der Hauscode (A - D) und der Gerätecode (1 - 3) bestimmen lässt. <br />
<br />
Die Codierung ist dabei:<br />
{| class="wikitable"<br />
! Hauscode !! Stelle 1-4<br />
|-<br />
| A || 1FFF<br />
|-<br />
| B || F1FF<br />
|-<br />
| C || FF1F<br />
|-<br />
| D || FFF1<br />
|}<br />
<br />
{| class="wikitable"<br />
! Gerätecode !! Stelle 5-7<br />
|-<br />
| 1 || 1FF<br />
|-<br />
| 2 || F1F<br />
|-<br />
| 3 || FF1<br />
|}<br />
<br />
Dazu (Stelle 8+9+10) noch drei statische Werte: 0FF.<br />
<br />
Der Code für '''An''' ist FF, für '''Aus''' 00.<br />
<br />
Beispiel: <br />
:<code>define My_Switch IT 1FFF1FF0FF FF 00 für A1</code><br />
Erfolgreich getestet mit CULfw V 1.49 CUL868.<br />
<br />
== Elro AB440 ==<br />
=== Möglichkeit 1: zu Intertechno-Codes umdippen ===<br />
[[File:ELRO-AB440_Funkschalter.jpg|right|thumb|Élro AB440 Funkschalter]]<br />
<br />
Günstige ELRO Funkschalter/Dimmer der Serie 440 lassen sich auch problemlos auf Intertechno Codierung "umdippen" und damit voll kompatibel mit allen möglichen A-P / 1-16 Intertechno Schaltcodes von FHEM aus nutzen. Dazu müssen die Dipschalter-Stellungen entsprechend Intertechno umgerechnet und gesetzt werden (1=ON, 0=OFF). <br />
<br />
Beispiele:<br />
{| class="wikitable"<br />
! Intertechno !! Elro Hauscode<br>1234 !! Elro Gerätecode<br>5ABCDE <br />
|-<br />
| A1 || 1111 || 111110 <br />
|-<br />
| A2 || 1111 || 011110 <br />
|-<br />
| A3 || 1111 || 101110 <br />
|-<br />
| A4 || 1111 || 001110 <br />
|-<br />
| A5 || 1111 || 110110 <br />
|-<br />
| A6 || 1111 || 010110 <br />
|-<br />
| A7 || 1111 || 100110 <br />
|-<br />
| A8 || 1111 || 000110 <br />
|-<br />
| A9 || 1111 || 111010 <br />
|-<br />
| A10 || 1111 || 011010 <br />
|-<br />
| A16 || 1111 || 000010 <br />
|-<br />
| C1 || 1011 || 111110 <br />
|-<br />
| C2 || 1011 || 011110 <br />
|}<br />
<br />
Weitere Erklärungen sind z.B. im [http://isn-systems.com/tools/it2elro Tool] der Fa. ISN-systems online berechnen lassen.<br />
<br />
Einziger Nachteil: Die originale Elro Fernbedienung funktioniert dann nicht mehr uneingeschränkt mit den Funkschaltern (eine Intertechno Fernbedienung funktioniert uneingeschränkt). Wenn man den Hauscode an der Fernbedienung einstellt, kann man durch drücken von z.T. mehreren Tasten gleichzeitig auch Intertechno schalten. Das ist aber nur was für den Notfall oder für Handakrobaten.<br />
<br />
<nowiki>15/16 -&gt; D<br />
13/14 -&gt; A+D<br />
11/12 -&gt; B+D<br />
09/10 -&gt; A+B+D<br />
07/08 -&gt; C+D<br />
05/06 -&gt; A+C+D<br />
03/04 -&gt; B+C+D<br />
01/02 -&gt; A+B+C+D</nowiki><br />
<br />
=== Möglichkeit 2: aus der vorhanden DIP-Schalterstellung den entsprechenden 10-digit InterTechno Code bestimmen ===<br />
Das ist prinzipiell ganz einfach. Hat man folgende DIP-Schalter-Stellung so muss man von links nach rechts einfach für jeden DIP gleich "ON" eine "0" und für "OFF" ein "F" definieren. Für die dargestellte DIP-Einstellung ergibt sich der damit der darunterstehende InterTechno Code:<br />
<br />
[[File:ELRO_0100101111.png]]<br />
<br />
<code>0F00F0FFFF</code><br />
<br />
Analog dazu ergeben sich für den gleichen Hauscode (Schalter 1-5) folgende Codes für die Funksteckdosen B bis E, wobei die Dose E mit der Originalfernbedienung nicht adressierbar ist, sich mit FHEM aber wunderbar schalten lässt.<br />
<br />
[[File:ELRO_0100110111.png]]<br />
<br />
<code>0F00FF0FFF</code><br />
<br />
[[File:ELRO_0100111011.png]]<br />
<br />
<code>0F00FFF0FF</code><br />
<br />
[[File:ELRO_0100111101.png]]<br />
<br />
<code>0F00FFFF0F</code><br />
<br />
[[File:ELRO_0100111110.png]]<br />
<br />
<code>0F00FFFFF0</code><br />
<br />
Dazu noch die Codes für AN = FF und AUS = F0 schaut eine vollständige Definition eines ELRO440 Funkschalters dann bsw. so aus:<br />
<br />
<nowiki> define ELRO_10110_A IT 0F00F0FFFF FF F0<br />
attr ELRO_10110_A IODev CUL_0<br />
attr ELRO_10110_A alias Stehlampe<br />
attr ELRO_10110_A fp_Grundriss 340,50,1,Stehlampe<br />
attr ELRO_10110_A group Schalter<br />
attr ELRO_10110_A model itswitch<br />
attr ELRO_10110_A room Wohnzimmer</nowiki><br />
<br />
[[File:b1-Funksteckdose-von-Toom.jpg|right|thumb|b1 Funksteckdose von Toom]]<br />
== b1 / Toom ==<br />
Das "Funksteckdosen-Set" der Marke b1 aus dem Toom-Baumarkt (3 Funksteckdosen + 1 Fernbedienung mit 4x ein/aus) funktioniert exakt wie ELRO, auch die DIP-Schalter sind genauso belegt. <br />
<br />
== Wetekom/Westfalia ==<br />
[[File:Westfalia-Funksteckdose.jpg|right|thumb|Westfalia Funksteckdose ZTC-S316A.]]<br />
Der eingestellte Hauscode ist F00F0FFF0F.<br />
<br />
In den Westfalia-Baumärkten gibt es Funksteckdosen mit Westfalia-Branding. Auf der Bedienungsanleitung steht aber Wetekom.<br />
<br />
Die Funksteckdosen selbst haben zehn DIP-Switches: 1234FEDCBA, während die Fernbedienung nur sechs hat: ABCDEF. Damit die Fernbedienung mit den Funksteckdosen funktioniert, darf man nur einen der DIP-Switches 1234 pro Funksteckdose auf ON schalten.<br />
<br />
Die Schaltung der DIP-Switches ABCDEF4321 entspricht direkt und in dieser Reihenfolge (also andersrum als direkt an der Funksteckdose) dem Hauscode und zwar entspricht ein Switch auf OFF einem F im Hauscode und ein Switch auf ON einer 0 im Hauscode.<br />
<br />
Die Steckdosen werden dann mit 01 ein- und mit 10 ausgeschaltet.<br />
<br />
Beispiel:<br />
define wf_steckdose IT F00F0FFF0F 01 10<br />
<br />
== Pollin Funksteckdosen ==<br />
<br />
Vom Aussehen sind die Steckdosen von Pollin (z.B. 3fach Set 550666) mit den Westfalia ZTC identisch, aber:<br />
<br />
* die DIP Schalter sind beschriftet von 0 bis 10;<br />
* der Adresscode entspricht dem invertierten ELRO 440 Code ->also (0=ON, 1=OFF)<br />
* der Code für "An" ist 0F, für "Aus" F0<br />
<br />
Beispiel für Adresse C2:<br />
<br />
define IT_C2 IT 0F00F0000F 0F F0<br />
<br />
== me micro-electric AS 73 ==<br />
<br />
[[Datei:Me_AS_73.JPG|right|thumb|micro-electric Funksteckdose AS 73]]<br />
<br />
Die micro-electric Funksteckdosen haben 10 DIP-Schalter: 123456ABCD.<br />
<br />
Der Hauscode wird an Sender und Steckdose mit 1-6 eingestellt, der Empfängercode A-D entspricht den Kanälen auf dem Handsender.<br />
<br />
DIP-Schalterstellung OFF entspricht F und ON entspricht 0.<br />
<br />
Die Steckdosen werden mit F0 ein- und mit 0F ausgeschaltet.<br />
<br />
Empfängercodes:<br />
{| class="wikitable"<br />
! Kanal !! Position 7-10<br />
|- <br />
| A || 0FFF <br />
|-<br />
| B || F0FF <br />
|-<br />
| C || FFF0 (Achtung: bei C und D sind die Codes vertauscht) <br />
|-<br />
| D || FF0F <br />
|}<br />
<br />
Beispiel:<br />
:<code>define Schalter_ME_A IT 0F0F000FFF F0 0F</code><br />
:<code>attr Schalter_ME_A IODev CUL1</code><br />
:<code>attr Schalter_ME_A model itswitch</code><br />
<br />
== Conrad / McPower Funkschaltset 3+1 ==<br />
Dieses Funkschaltset wird unter mehreren Namen in verschiedenen Bau- und Heimwerkermärkten sowie bei Conrad (Best Nr. 640475 - 62) vertrieben. Teilweise auch mit unterschiedlichen Schaltleistungen.<br />
Die Konfiguration funktioniert genauso wie beim [[Intertechno_Code_Berechnung#FLS_100|FLS100]]<br />
<br />
== CMI / OBI / LUX IP44-Funkschaltset 2+1 ==<br />
[[File:RCS_14G_Funksteckdose_Obi_klein.png|right|thumb|Rückansicht der OBI / Lux Funksteckdose]]<br />
Dieses Set wird u.a. bei OBI verkauft, als Hersteller wird die Emil Lux GmbH angegeben. Typennummer RCS-14G, Artikel Nummer 308555<br />
Die Steckdosen sind IP44 geschützt und damit auch für den Außeneinsatz geeignet.<br />
Die Steckdosen verfügen lediglich über einen Kanal-Schalter von 1-4. Diese Kanal-Nummeren korrespondieren mit der folgenden Übersetzung:<br />
<br />
{| class="wikitable"<br />
! Kanal !! Code (Stelle 1-10)<br />
|- <br />
| 1 || 000FF0F0FF <br />
|-<br />
| 2 || 000FFF00FF <br />
|-<br />
| 3 || 000F0FF0FF <br />
|-<br />
| 4 || 0000FFF0FF <br />
|}<br />
<br />
Die Steckdosen werden dann mit FF ein- und mit F0 ausgeschaltet.<br />
<br />
Beispiel:<br />
:<code>define Schalter_OBI_Code_1 IT 000FF0F0FF FF F0</code><br />
:<code>attr Schalter_OBI_Code_1 IODev CUL1</code><br />
:<code>attr Schalter_OBI_Code_1 model itswitch</code><br />
<br />
<br />
== Noch nicht aufgeführte Geräte ==<br />
Wer ein Intertechno-ähnliches Gerät besitzt, das in dieser Liste noch nicht aufgeführt ist, muss die Kodierung selbst bestimmen. Dazu gibt es verschiedene Möglichkeiten, die in diesem Abschnitt aufgeführt werden. Die Ergebnisse bitte hier eintragen, um Nachfolgern die Arbeit zu ersparen!<br />
<br />
=== Audio-Eingang zur Messung ===<br />
Hier wird die Fernbedienung oder der Empfänger mit einer entsprechenden Schaltung an den Mikrofon-Eingang eines Rechners angeschlossen und mit einem Audio-Programm werden die Signalverläufe aufgenommen. Diese Methode wird [http://avr.börke.de/E-Funk.htm hier] näher erläutert.<br />
<br />
=== Platine analysieren ===<br />
[[File:Westfalia-Funkfernbedienung-hinten.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von hinten.]]<br />
[[File:Westfalia-Funkfernbedienung-vorne.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von vorne.]]<br />
<br />
Platine der Fernbedienung oder des Empfängers betrachten und so die Beschaltung des Decoder/Encoder Chips ermitteln. Bei der Wetekom-Fernbedienung wird beispielsweise der Chip LP801b verwendet, der funktional identisch zum PT2262 ist. Im [http://www.escol.com.my/Datasheets_specs/pt2262_1.pdf Datenblatt des PT2262] kann man dann die Beschaltung nachsehen. Nun betrachtet man den Verlauf der Leiterbahnen auf der Platine, um die Beschaltung des Chips zu ermitteln. So kann man beispielsweise bei der Wetekom-Fernbedienung sehen, dass die DIP-Switches A bis F auf die Eingänge A0 bis A5 geschaltet sind. Außerdem sieht man, mit welchen Eingängen die einzelnen Taster verbunden sind.<br />
<br />
Nun kann man messen, zwischen welchen Chip-Eingängen und Batteriepolen eine Spannung anliegt, bzw. (ohne Batterie) zwischen welchen Chip-Eingängen und Batteriepolen es einen Durchgang gibt, um zu ermitteln, wie die DIP-Switches schalten. Im Fall der Wetekom-Fernbedienung liegt keine Spannung zwischen den Eingängen und den beiden Batteriepolen an, wenn die DIP-Switches auf OFF stehen: Der Eingang liegt also auf F (Float). Wenn die DIP-Switches auf ON stehen, liegt nur eine Spannung zwischen dem Pluspol der Batterie und dem Eingang an, es gibt also einen Durchgang zwischen dem Minuspol und dem Eingang, so dass der Eingang auf V_SS liegt und damit 0 eingestellt ist.<br />
<br />
Bei den Eingängen D0 und D1 sieht man, dass der Batterie-Pluspol immer über einen Widerstand mit dem Dateneingang verbunden ist, also normalerweise 1 anliegt. Ist aber ein Ein-Taster gedrückt, wird der Eingang D1 direkt mit dem Minuspol der Batterie verbunden, bei den Aus-Tastern der Eingang D0 (die Verbindung der Aus-Taster ist auf den Bildern nicht besonders gut zu erkennen). Durch diese Verbindung wird der Eingang auf V_SS heruntergezogen und damit ist 0 eingestellt.<br />
<br />
=== Mit [[CUL]] im Debug-Modus Rohsignale empfangen und analysieren ===<br />
* Wurde im {{Link2Forum|Topic=5599|LinkText=Forum}} diskutiert.<br />
Ein 433MHz CUL kann mit dem Befehl <code>X67</code> Intertechno Kommandos mitlesen.<br />
Allerdings funktioniert das bei der "üblichen" Firmware nur lückenhaft.<br />
Dazu wurde bereits eine spezielle Variante der culfw entwickelt (siehe {{Link2Forum|Topic=24436|Message=105|LinkText=Forum}}).<br />
Die Ausgaben sind aber dann als doppelt so langes Binärwort im Hex-Format.<br />
Man muss quasi jedes zweite Bit streichen, da die einzelnen Bits als steigende bzw. fallende Flanken übertragen werden.<br />
Man kann aber damit auch einer neuen ITT-1500 ihre Kommandos und vor allem ihre 26-Bit ID entlocken.<br />
<br />
==== Mit CUL868 433MHz mitlesen ====<br />
Man kann auch mit der 868MHz Version des CUL Fernbedienungen von Intertechno mitlesen.<br />
Dazu die gewünschte Trägerfrequenz 433.92MHz * 2^16 / 26MHz = 1093745 = 0x10B071 als 24-Bit Teiler in die Register <code>FREQ[2-0]</code> schreiben und einen Reset ausführen.<br />
W0F10<br />
W10B0<br />
W1171<br />
B<br />
Danach kann man mit <code>X67</code> auf der Frequenz mitlesen. Mit <code>e</code> kann der EEPROM wieder auf den Default 0x21656A, 868.30MHz gestellt werden.<br />
<br />
[[Kategorie:Intertechno]]<br />
[[Kategorie:HOWTOS]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=HomeConnect&diff=22036HomeConnect2017-08-03T06:07:01Z<p>No Legend: update add hinzugefügt</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Anbindung von Hausgeräten mit Home Connect Schnittstelle<br />
|ModType=d<br />
|ModForumArea=Sonstige Systeme<br />
|ModTechName=48_HomeConnectConnection.pm 48_HomeConnect.pm<br />
|ModOwner=swhome<br />
}}<br />
==Übersicht==<br />
Mit den beiden Modulen HomeConnectConnection und HomeConnect können in FHEM Devices für [http://www.home-connect.com/de/de/|Home Connect Hausgeräte] angelegt werden, die an einem Home Connect Account angemeldet sind. Mögliche Hausgeräte sind aktuell Backöfen, Spülmaschinen, Kühlschränke, Waschmaschinen, Wäschetrockner und Kaffeemaschinen der Marken Bosch, Siemens und Neff.<br />
<br />
Wann verwendet man HomeConnectConnection, wann HomeConnect?<br />
<br />
Das Modul HomeConnectConnection verwaltet die Verbindung zwischen FHEM und einem Home Connect Account. Es legt die HomeConnect Devices für die einzelnen Hausgeräte an.<br />
<br />
==Aktueller Status des Moduls==<br />
Die beiden Module befinden sich aktuell im Betatest. Jeder Tester muss sich bei Home Connect als Entwickler anmelden und freigeschaltet werden. Die Freischaltung kann über eine persönliche Nachricht an swhome hier im Forum beantragt werden.<br />
<br />
Was jeder auch ohne Freischaltung probieren kann ist der Hausgeräte-Simulator. Allerdings kann man damit in der Praxis nicht viel anfangen...<br />
<br />
==Definition von FHEM Devices==<br />
===Modul-Installation===<br />
Zur Installation (oder zum Update) einfach diesen Befehl in der FHEM Kommandozeile eingeben:<br />
<br />
<pre><br />
update all https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt<br />
</pre><br />
<br />
Danach FHEM neu starten.<br />
<br />
Fehlermeldungen? Eventuell muss die Perl-Bibliothek libswitch-perl installiert werden.<br />
<br />
Damit das Modul auch bei einem normale "update check" mit geprüft wird, muss folgendes ergänzt werden<br />
<pre><br />
update add https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt<br />
</pre><br />
<br />
===Basisdefinition===<br />
Um mit dem Simulator zu testen, braucht Ihr einen Entwickleraccount bei [https://developer.home-connect.com/]<br />
<br />
Man braucht zwingend einen Advanced Account um Geräte fernstarten zu dürfen. Das kostet nichts, es wird jedoch eine Namensverifikation durchgeführt.<br />
<br />
Im Entwickleraccount muss eine Applikation generiert werden, das wichtigste dabei ist die Redirect URL. Diese URL muss den Host enthalten, den Ihr in Eurer Umgebung für den Zugriff auf FHEM verwendet, also localhost oder 192.168.x.y, und sie muss ein Kommando in dem definierten HomeConnectConnection Modul aufrufen. Die URL sieht dann z.B. so aus:<br />
<br />
<pre><br />
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20<br />
</pre><br />
<br />
Die identische URL muss sowohl auf der Home Connect Seite in der Applikation angegeben werden, als auch bei der Definition in FHEM. Dazu kommt noch der generierte API Key:<br />
<br />
<pre><br />
define hcconn HomeConnectConnection API-KEY REDIRECT-URL simulator<br />
</pre><br />
<br />
Also zum Beispiel<br />
<br />
<pre><br />
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 <br />
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20 simulator<br />
</pre><br />
<br />
Danach findet Ihr in dem neuen Device hcconn einen Link namens Home Connect Login. Diesen klicken und die Anmeldung wird durchgeführt. Danach im hcconn-Device noch scanDevices ausführen und Ihr solltet eine stattliche Anzahl Hausgeräte finden.<br />
<br />
==Sicherheitsfunktion csrfToken in FHEM==<br />
Neueste Versionen von FHEM verwenden eine [[csrfToken-HowTo|XSRF Schutzfunktion]]. Wer diese benutzen möchte, muss ein statisches Token definieren:<br />
<pre><br />
attr WEB csrfToken myToken123<br />
</pre><br />
und muss dann an seine redirectURL noch diesen Teil anhängen:<br />
<pre><br />
&fwcsrf=myToken123<br />
</pre><br />
Beispiel:<br />
<pre><br />
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 <br />
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20&fwcsrf=myToken123 simulator<br />
</pre><br />
Wichtig wie immer: Die Redirect URL muss sowohl im Home Connect Developer Program als auch in der Definition des FHEM HomeConnectConnection devices geändert werden.<br />
<br />
==Problembehandlung==<br />
Frage: Wenn ich Zuhause bin, erreiche ich meinen FHEM-Server unter: https:// 192.168.x.x:8083/fhem. <br />
Aus dem Internet erreiche ich FHEM über eine statische IP und Port-forwarding. Funktioniert das dann auch?<br />
<br />
Antwort: Es muss kein Zugriff aus dem Internet auf den lokalen Server freigeschaltet werden, der Redirect passiert im eigenen Browser. <br />
Aktuell ist nur eine redirect URL möglich, daher müsstest Du dich beim Home Connect Login für eine Variante entscheiden. Man muss sich ja nicht ständig neu einloggen. Ich habe aber gehört dass zukünftig mal eine Liste von URL's hinterlegt werden kann.<br />
<br />
Frage: Ich bekomme '''vor''' dem Home Connect Login eine Fehlermeldung, sofort nach dem Klick auf "Home Connect Login"<br />
<br />
Antwort: Entweder ist der API Key falsch oder die Redirect URL. Letztere muss den korrekten Hostnamen und Port enthalten, und auch den Namen des HomeConnectConnection device in der FHEM Installation. Diese URL muss identisch in der Home Connect App Definition und in der FHEM Definition eingetragen werden.<br />
<br />
Frage: Ich bekomme '''nach''' dem Home Connect Login "Error" als Meldung in FHEM<br />
<br />
Antwort: Dann hat Deine Redirect URL gestimmt und es ist was faul mit dem Api Key. <br />
<br />
- Inspiziere mal genau die URL der Seite wo "Error" steht, vielleicht findest Du dort noch eine Fehlermeldung. <br />
<br />
- Hast Du das Wort simulator in der Definition mit angegeben? Nur freigeschaltete Betatester können echte Hausgeräte steuern.<br />
<br />
- Hast Du einen Advanced Account? Wenn nicht, können die Rechte von FHEM so eingeschränkt werden:<br />
<pre><br />
attr hcconn accessScope IdentifyAppliance Monitor <br />
</pre><br />
<br />
Frage: Die Geräte werden angelegt, aber das einzige, was ich angeboten bekomme ist: StartProgram RemoteProgramNotEnabled<br />
<br />
Antwort: Du musst den Fernstart der Spülmaschine aktivieren, erst danach darf FHEM sie starten.<br />
<br />
Frage: Nach dem Erlauben des Zugriffs bei HomeConnect erscheint nur ein weißer Bildschirm.<br />
<br />
Antwort: Du musst das Attribut csrfToken deines FHEMWEB auf none setzen (oder wie oben beschrieben ein statisches Token installieren)<br />
<pre><br />
attr WEB csrfToken none<br />
</pre><br />
<br />
==Unterstützte Geräte==<br />
Grundsätzlich funktionieren alle Home Connect Geräte, d.h. sie werden zumindest in FHEM angelegt und ihr Status wird sichtbar. Steuern kann man sie aktuell jedoch noch nicht alle.<br />
===Backofen===<br />
Steuerung aktuell nicht möglich, aber der Status wird angezeigt<br />
===Geschirrspüler===<br />
Steuerung möglich, Status wird angezeigt. Die Programmoption BSH.Common.Option.StartInRelative kann vor dem Programmstart auf eine Anzahl Sekunden gesetzt werden, um die der Start verzögert werden soll.<br />
<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Luftdaten.info/Feinstaub&diff=21572Luftdaten.info/Feinstaub2017-05-16T05:53:23Z<p>No Legend: Modultyp geändert</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Collect data from the Lufdaten.info project<br />
|ModType=d<br />
|ModCmdRef=LuftdatenInfo<br />
|ModForumArea=Bastelecke<br />
|ModFTopic=66674<br />
|ModTechName=59_LuftdatenInfo.pm<br />
|ModOwner=igami ({{Link2FU|4106|Forum}} / [[Benutzer:no_Legend|Wiki]])<br />
}}<br />
<br />
'''Dieser Artikel befindet sich noch im Aufbau.'''<br />
<br />
'''FeinstaubInfo''' ist ein Modul, dass die Daten des Projektes http://luftdaten.info/ in FHEM abrufbar macht.<br />
Es können eigene Sensoren abgefragt werden oder externe Sensoren benutzt werden.<br />
<br />
== Sensor bauen ==<br />
http://luftdaten.info/feinstaubsensor-bauen/<br />
Der Bau eines eigenen Sensor wird auf der Projektseite, siehe Link oben erklärt.<br />
Die Kosten belaufen sich auf ca. 30-50€ je nach Bezugsquelle der einzelnen Bauteile.<br />
<br />
Zwei Kurze Videos zum Aufbau und Flashen des Sensor sind auch auf Youtube zu finden:<br />
https://youtu.be/8oLCTeCfabU<br />
https://youtu.be/NK3E083WayM<br />
<br />
== Datenschutz ==<br />
Standard-Einstellung des Sensor laden die Messwerte zu der Projekt Seite hoch.<br />
Die Darstellung auf der Seite erfolgt allerdings erst, wenn man den Gründern Des Projekt eine Email zu gesendet hat.<br />
Wie dies genau auszusehen hat, ist der Anleitung unter "Letzte Schritte" auf der Projekt Seite zu entnehmen.<br />
<br />
Der Sonsor kann auch "nur Lokal" arbeiten.<br />
Da dies ein Projekt von Usern und für User ist, sollte man von der "nur Lokal" Version des Sensors abstand nehmen.<br />
<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Luftdaten.info/Feinstaub&diff=21571Luftdaten.info/Feinstaub2017-05-16T05:50:04Z<p>No Legend: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Collect data from the Lufdaten.info project<br />
|ModType=h<br />
|ModCmdRef=LuftdatenInfo<br />
|ModForumArea=Bastelecke<br />
|ModFTopic=66674<br />
|ModTechName=59_LuftdatenInfo.pm<br />
|ModOwner=igami ({{Link2FU|4106|Forum}} / [[Benutzer:no_Legend|Wiki]])<br />
}}<br />
<br />
'''Dieser Artikel befindet sich noch im Aufbau.'''<br />
<br />
'''FeinstaubInfo''' ist ein Modul, dass die Daten des Projektes http://luftdaten.info/ in FHEM abrufbar macht.<br />
Es können eigene Sensoren abgefragt werden oder externe Sensoren benutzt werden.<br />
<br />
== Sensor bauen ==<br />
http://luftdaten.info/feinstaubsensor-bauen/<br />
Der Bau eines eigenen Sensor wird auf der Projektseite, siehe Link oben erklärt.<br />
Die Kosten belaufen sich auf ca. 30-50€ je nach Bezugsquelle der einzelnen Bauteile.<br />
<br />
Zwei Kurze Videos zum Aufbau und Flashen des Sensor sind auch auf Youtube zu finden:<br />
https://youtu.be/8oLCTeCfabU<br />
https://youtu.be/NK3E083WayM<br />
<br />
== Datenschutz ==<br />
Standard-Einstellung des Sensor laden die Messwerte zu der Projekt Seite hoch.<br />
Die Darstellung auf der Seite erfolgt allerdings erst, wenn man den Gründern Des Projekt eine Email zu gesendet hat.<br />
Wie dies genau auszusehen hat, ist der Anleitung unter "Letzte Schritte" auf der Projekt Seite zu entnehmen.<br />
<br />
Der Sonsor kann auch "nur Lokal" arbeiten.<br />
Da dies ein Projekt von Usern und für User ist, sollte man von der "nur Lokal" Version des Sensors abstand nehmen.<br />
<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Luftdaten.info/Feinstaub&diff=21570Luftdaten.info/Feinstaub2017-05-16T05:49:37Z<p>No Legend: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Collect data from the Lufdaten.info project<br />
|ModType=h<br />
|ModCmdRef=LuftdatenInfo<br />
|ModForumArea=Bastelecke<br />
|ModFTopic=66674<br />
|ModTechName=59_LuftdatenInfo.pm<br />
|ModOwner=igami ({{Link2FU|4106|Forum}} / [[Benutzer:no_Legend|Wiki]])<br />
}}<br />
<br />
'''Dieser Artikel befindet sich noch im Aufbau.'''<br />
<br />
'''FeinstaubInfo''' ist ein Modul, dass die Daten des Projektes http://luftdaten.info/ in FHEM abrufbar macht.<br />
Es können eigene Sensoren abgefragt werden oder externe Sensoren benutzt werden.<br />
<br />
== Sensor bauen ==<br />
http://luftdaten.info/feinstaubsensor-bauen/<br />
Der Bau eines eigenen Sensor wird auf der Projektseite, siehe Link oben erklärt.<br />
Die Kosten belaufen sich auf ca. 30-50€ je nach Bezugsquelle der einzelnen Bauteile.<br />
<br />
Zwei Kurze Videos zum Aufbau und Flashen des Sensor sind auch auf Youtube zu finden:<br />
https://youtu.be/8oLCTeCfabU<br />
https://youtu.be/NK3E083WayM<br />
<br />
== Datenschutz ==<br />
Standard-Einstellung des Sensor laden die Messwerte zu der Projekt Seite hoch.<br />
Die Darstellung auf der Seite erfolgt allerdings erst, wenn man den Gründern Des Projekt eine Email zu gesendet hat.<br />
Wie dies genau auszusehen hat, ist der Anleitung unter "Letzte Schritte" auf der Projekt Seite zu entnehmen.<br />
<br />
Der Sonsor kann auch "nur Lokal" arbeiten.<br />
Da dies ein Projekt von Usern und für User ist, sollte man von der "nur Lokal" Version des Sensors abstand nehmen.<br />
<br />
[[Kategorie:Other Components]]<br />
[[Kategorie:Umwelt-Messdaten]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Luftdaten.info/Feinstaub&diff=21569Luftdaten.info/Feinstaub2017-05-16T05:47:23Z<p>No Legend: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Collect data from the Lufdaten.info project<br />
|ModType=h<br />
|ModCmdRef=LuftdatenInfo<br />
|ModForumArea=Bastelecke<br />
|ModFTopic=66674<br />
|ModTechName=59_LuftdatenInfo.pm<br />
|ModOwner=igami ({{Link2FU|4106|Forum}} / [[Benutzer:no_Legend|Wiki]])<br />
}}<br />
<br />
'''Dieser Artikel befindet sich noch im Aufbau.'''<br />
<br />
'''FeinstaubInfo''' ist ein Modul, dass die Daten des Projektes http://luftdaten.info/ in FHEM abrufbar macht.<br />
Es können eigene Sensoren abgefragt werden oder externe Sensoren benutzt werden.<br />
<br />
== Sensor bauen ==<br />
http://luftdaten.info/feinstaubsensor-bauen/<br />
Der Bau eines eigenen Sensor wird auf der Projektseite, siehe Link oben erklärt.<br />
Die Kosten belaufen sich auf ca. 30-50€ je nach Bezugsquelle der einzelnen Bauteile.<br />
<br />
Zwei Kurze Videos zum Aufbau und Flashen des Sensor sind auch auf Youtube zu finden:<br />
https://youtu.be/8oLCTeCfabU<br />
https://youtu.be/NK3E083WayM<br />
<br />
== Datenschutz ==<br />
Standard-Einstellung des Sensor laden die Messwerte zu der Projekt Seite hoch.<br />
Die Darstellung auf der Seite erfolgt allerdings erst, wenn man den Gründern Des Projekt eine Email zu gesendet hat.<br />
Wie dies genau auszusehen hat, ist der Anleitung unter "Letzte Schritte" auf der Projekt Seite zu entnehmen.<br />
<br />
Der Sonsor kann auch "nur Lokal" arbeiten.<br />
Da dies ein Projekt von Usern und für User ist, sollte man von der "nur Lokal" Version des Sensors abstand nehmen.<br />
<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:No_Legend&diff=21568Benutzer Diskussion:No Legend2017-05-16T05:46:14Z<p>No Legend: </p>
<hr />
<div>== Willkommen! ==<br />
{| width="100%" cellspacing="0" cellpadding="6" style="line-height: 20px; background: #E0E0E0; border: 2px solid #1874CD;"<br />
|-<br />
| colspan="4" style="background:#1874CD;" |<big><span style="color: #FAFAFA">'''Hallo No Legend,''' willkommen im FHEM Wiki!</span></big><br />
|-<br />
| colspan="4" | Danke für dein Interesse an unserem Projekt, ich freue mich schon auf deine weiteren Beiträge. Die folgenden Seiten sollten dir die ersten Schritte erleichtern, bitte nimm dir daher etwas Zeit, sie zu lesen.<br />
<br />
----<br />
'''FHEM-spezifische Informationen'''<br />
<br />
|-<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[Systemübersicht]]'''<br />''FHEM Systemübersicht''<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[FHEMWiki:Über FHEMWiki]]'''<br />''Informationen über dieses Wiki''<br />
<!-- Abschnitt auf Kommentar gesetzt<br />
|-<br />
| colspan="4" |<br />
----<br />
<br />
{{Todo|FHEM-spezifische Anleitungen und Regeln.}}<br />
<br />
---- <br />
Ende von 'Abschnitt auf Kommentar gesetzt' --><br />
|-<br />
| colspan="4" | <br />
----<br />
'''Generelle Informationen über (Media)Wikis'''<br />
|-<br />
| width="8%" | [[Datei:Crystal Clear app kedit.svg|rechts|30px|link=Hilfe:Bearbeiten]]<br />
| width="38%" | '''[[Hilfe:Bearbeiten]]'''<br />''Zugang zu allen wichtigen Informationen.''<br />
| width="8%" | [[Datei:X-office-presentation.svg|rechts|30px|link=Wikipedia:Tutorial]]<br />
| width="38%" | <!-- '''[[Wikipedia:Tutorial]]'''-->'''[http://de.wikipedia.org/wiki/Wikipedia:Tutorial Wikipedia:Tutorial]'''<br />''Schritt-für-Schritt-Anleitung für Einsteiger.''<br />
|-<br />
| [[Datei:Applications-system.svg|rechts|30px|link=Wikipedia:Grundprinzipien]]<br />
| '''<!--[[Wikipedia:Grundprinzipien]]-->[http://de.wikipedia.org/wiki/Wikipedia:Grundprinzipien Wikipedia:Grundprinzipien]'''<br />''Die grundlegende Philosophie unseres Projekts.''<br />
| [[Datei:MentorenProgrammLogo-7.svg|rechts|60px|link=Wikipedia:Mentorenprogramm]]<br />
| '''<!--[[Wikipedia:Mentorenprogramm]]-->[http://de.wikipedia.org/wiki/Wikipedia:Mentorenprogramm Wikipedia:Mentorenprogramm]'''<br />''Persönliche Einführung in die Beteiligung bei Wikipedia.''<br />
|-<br />
| colspan="4" |<br />
----<br />
Bitte beachte, [[Wikipedia:Was Wikipedia nicht ist|was Wikipedia nicht ist]], und "unterschreibe" deine Diskussionsbeiträge durch Eingabe von <code>--<nowiki>~~~~</nowiki></code> oder durch Drücken der Schaltfläche [[Datei:button_sig.png|Signaturknopf|20px|link=Hilfe:Signatur]] über dem Bearbeitungsfeld. Artikel werden jedoch nicht unterschrieben, und wofür die Zusammenfassungszeile da ist, erfährst du unter [[wikipedia:Hilfe:Zusammenfassung und Quellen|Hilfe:Zusammenfassung und Quellen]]. <br /><br /><br />
[[Datei:Nuvola apps ksirc.png|25px|link=Benutzer Diskussion:Ph1959de]] &nbsp;&nbsp; '''Hast du Fragen an mich?''' Schreib mir auf [[Benutzer Diskussion:Ph1959de|<u>meiner</u> Diskussionsseite]]! Viele Grüße, [[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:55, 29. Jun. 2014 (UTC)<br />
|}<br />
<br />
== VELUX Solar-Rollladen... und hochgeladene Bilder ==<br />
<br />
Hallo No Legend,<br />
<br />
* du hast in den letzten Tagen intensiv an der "VELUX Solar-Rollladen..."-Seite gearbeitet und auch Dateien/Bilder eingebunden. Hast Du zu den Bildern die Copyright-Frage geklärt? Soweit ich sehen kann (hast Du ja auch bei den Meta-Daten angegeben) stammen die von anderen Webseiten ... was nicht notwendigerweise bedeutet, dass man die einfach so kopieren und anderweitig nutzen darf. Ich möchte Dich bitten, das Copyright zu klären und falls die Erlaubnis nicht kommt, die Bilder zu entfernen bzw. durch selbstgemachte Fotos zu ersetzen.<br />
::Hallo Peter,ich habe immer gedacht, dass ein Quellverweis reicht um aus dem Copyright raus zu sein. Wäre denn eine Externe Verlinkung auf die Bilder zulässig? Bin im Wiki Thema recht neu.<br />
:::(Ph1959de) Such doch mal nach "Produktbilder" und "Urheberrecht" - ich denke, die häufigste Meinung dazu ist: Verwendung/Kopie nicht erlaubt. Bei den beiden Bildern im Artikel sehe ich ohnehin nicht die dringende Notwendigkeit, sie direkt einzubinden ... also, wenn überhaupt, dann die Seite verlinken (mit einem kurzen Hinweis, warum es sinnvoll ist, sich das anzuschauen).<br />
:::(Ph1959de) Angesichts der rechtlichen Unsicherheit möchte ich gern die beiden Bilder löschen.<br />
::::Kein Ding. Kannst beide Bilder löschen. Werde die FB selber fotografieren. hab ja selbst welche ;-)<br />
:::::(Ph1959de) Erledigt.<br />
<br />
* Zur Einbindung der Modul-Infobox: hier wäre es mir lieber, Du würdest die SOMFY Modulseite anlegen und da die Basisbeschreibung erstellen. Die VELUX...-Seite kann/sollte dann wechselseitig verlinkt werden.<br />
::Für das Somfy Modul einen Eintrag zu verfassen sehe ich nicht als Sinvoll für mich an. Ich benutzte es nur für meinen Anwendungsfall und kann nicht alles abdecken.<br />
:::(Ph1959de) Das ändert aber nichts daran, dass das hier nicht die SOMFY Modulseite ist. Ich mache mal die Änderung ([[SOMFY]]-Modulseite angelegt).<br />
::::Alles klar. Gibt es eigentlich für eine Howto solche speziellen Boxen für oben rechts?<br />
{{Randnotiz|RNText='''Infobox HowTo'''<br>'''Feld1''': ''Text1''<br>'''Feld2''': ''Text2''<br>...}}<br />
:::::(Ph1959de) Ich habe bisher den Bedarf dafür (noch) nicht gesehen. Du kannst ja mal versuchsweise mit <nowiki>{{Randnotiz}}</nowiki> eine "handgestrickte" Infobox "simulieren" (siehe Beispiel rechts). Falls sich dabei herauskristallisiert, dass da immer wieder die gleichen Stichworte / Attribute auftauchen, bin ich gern bereit, daraus/dafür eine Infobox-Vorlage zu machen.<br />
<br />
* Und, abschließend: ich habe die Seite nicht intensiv gelesen, bin aber der Ansicht, es sollte auch beim kurzen Überfliegen klar werden, worum es überhaupt geht. Ist "VELUX Solar-Rollladen SSL" ein Modul (wie Du durch Einbindung der Modul-Infobox suggerierst), ist es Hardware oder "nur" ein HowTo zur Einbindung eines speziellen Rollladen-Typs in FHEM?<br />
::Eigentlich denke ich ist es eher als Howto zu sehen. Gibt es eine Modulbox für ein Howto? Ich finde es nicht schlecht immer wiederkehrende Elemente benutzten, damit sich die Leute schnell zurecht finden. Verlinkung auf Command Ref, Forums Thread usw.<br />
:::(Ph1959de) Eine Übersicht über die im FHEM-Wiki verfügbaren Vorlagen findest Du auf [[FHEMWiki:Über FHEMWiki]]. Den Nutzen einer Howto Infobox kann ich noch nicht erkennen.<br />
: Ein Tipp: beginne die Seite mit (sinngemäß) ''VELUX Solar-Rollladen SSL ist ein/eine ... der/die dazu dient ...'' anstelle des Texts, den Du derzeit unter der Überschrift ''Vorwort'' stehen hast (die Überschrift kann dann auch gleich entfallen; schau Dir einfach mal einen fast beliebigen Wikipedia-Artikel an, ich hoffe, dann wird verständlich, was ich meine). --[[Benutzer:Ph1959de|Peter]] <br />
<br />
::Hast du eine Artikel an dem ich mich orientieren kann?<br />
:::(Ph1959de) Wie gesagt, fast jeder Wikipedia Artikel. FHEM-Wiki-seitig vielleicht "[[FHEMWiki:Über FHEMWiki#Beispiel: Neuer Artikel|Neuer Artikel]]" (generell) oder z.B. "[[update]]" (oder viele andere Seiten, die die Infobox Modul benutzen).<br />
::::Schau ich nach.<br />
<br />
::::Dank dir Peter, bin im Wiki Geschäft noch recht neu.<br />
:::::(Ph1959de) Jeder hat mal angefangen. Lies Dir doch in einer ruhigen Stunde noch mal den Begrüßungstext auf dieser Seite durch ... und vor allem die "Über FHEMWiki" Seite.<br />
<br />
([[Benutzer Diskussion:Ph1959de|Diskussion]]) 11:57, 8. Dez. 2015 (CET)<br />
:::(Ph1959de) --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 10:53, 9. Dez. 2015 (CET)<br />
:::::(Ph1959de) --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 08:54, 10. Dez. 2015 (CET)<br />
<br />
== Artikel VELUX Solar-Rollladen SSL ==<br />
<br />
Hallo No Legend,<br />
<br />
Dein Artikel VELUX Solar-Rollladen SSL erscheint mir suspekt. Ich bin der Meinung das was dort steht geht so gar nicht. Die Velux Solar SSL werden mit io Homecontrol gesteuert über 868 MHz und keiner kann diese Protokoll nachempfinden. Der alte Somfy RTS arbeitet ganz anders.<br />
Kannst Du den Artikel bitte konkretisieren? Es gab im Forum jetzt eine Frage dazu und der User musste feststellen, dass es so nicht geht. <br />
Gruß Otto<br />
<br />
<br />
Ich habe das ganze wie im Wiki Artikel beschrieben bei mir im Einsatz.<br />
Soweit ich das in Erfahrung bringen konnte, geht das Somfy Modul nur mit alten SSL Rolläden-<br />
Damit es einfacher ist, werde ich die Tage Bilder machen von meiner FB und diese in den Wiki Artikel rein packen.</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Luftdaten.info/Feinstaub&diff=21567Luftdaten.info/Feinstaub2017-05-16T05:41:07Z<p>No Legend: Erste Version des Artikel rund um Luftdaten.Info Modul alias Feinstaubsensors</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Collect data from the Lufdaten.info project<br />
|ModType=h<br />
|ModCmdRef=LuftdatenInfo<br />
|ModForumArea=Bastelecke<br />
|ModFTopic=66674<br />
|ModTechName=59_LuftdatenInfo.pm<br />
|ModOwner=igami ({{Link2FU|4106|Forum}} / [[Benutzer:no_Legend|Wiki]])<br />
}}<br />
<br />
'''Dieser Artikel befindet sich noch im Aufbau.'''<br />
<br />
'''FeinstaubInfo''' ist ein Modul, dass die Daten des Projektes http://luftdaten.info/ in FHEM abrufbar macht.<br />
Es können eigene Sensoren abgefragt werden oder externe Sensoren benutzt werden.<br />
<br />
== Sensor bauen ==<br />
http://luftdaten.info/feinstaubsensor-bauen/<br />
Der Bau eines eigenen Sensor wird auf der Projektseite, siehe Link oben erklärt.<br />
Die Kosten belaufen sich auf ca. 30-50€ je nach Bezugsquelle der einzelnen Bauteile.<br />
<br />
Zwei Kurze Videos zum Aufbau und Flashen des Sensor sind auch auf Youtube zu finden:<br />
https://youtu.be/8oLCTeCfabU<br />
https://youtu.be/NK3E083WayM<br />
<br />
== Datenschutz ==<br />
Standard-Einstellung des Sensor laden die Messwerte zu der Projekt Seite hoch.<br />
Die Darstellung auf der Seite erfolgt allerdings erst, wenn man den Gründern Des Projekt eine Email zu gesendet hat.<br />
Wie dies genau auszusehen hat, ist der Anleitung unter "Letzte Schritte" auf der Projekt Seite zu entnehmen.<br />
<br />
Der Sonsor kann auch "nur Lokal" arbeiten.<br />
Da dies ein Projekt von Usern und für User ist, sollte man von der "nur Lokal" Version des Sensors abstand nehmen.</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Twilight&diff=15855Twilight2016-07-19T15:18:54Z<p>No Legend: /* Anwendung */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Virtuelles Gerät zur Berechnung der Dämmerungszustände für eine gegebene Position<br />
|ModType=h<br />
<!-- |ModCategory=?? --><br />
<!-- |ModCmdRef=[http://forum.fhem.de/index.php/topic,19922.0.html siehe Forum] --><br />
|ModTechName=59_Twilight.pm<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModOwner=dietmar63 / [http://forum.fhem.de/index.php?action=profile;u=405 Dietmar63]<br />
}}<br />
<br />
[[Twilight]] ist ein Hilfsmodul, das für eine über Koordinaten spezifizierte Position diverse Dämmerungszustände, Zeiten und die Helligkeit berechnet und als Readings bereitstellt. Darüber hinaus werden auch, sofern spezifiziert, über die Yahoo Wetter-ID Wetterinformationen bereitgestellt bzw. in die Berechnungen mit einbezogen.<br />
<br />
== Voraussetzungen ==<br />
Keine.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
:<code>define <name> Twilight <latitude> <longitude> [<indoor_horizon> [<Weather_Position>]]</code><br />
Die Bedeutung der Parameter:<br />
;latitude / longitude<br />
:Geokoordinaten, für die die Werte berechnet werden sollen<br />
;indoor_horizon<br />
:Virtueller Horizont <br />
;Weather_Position<br />
:Yahoo Wetter-ID für den gewünschten Standort; der eingegebene Wert wird als "internal value" '''WEATHER''' gespeichert.<br />
<br />
=== Attribute ===<br />
<br />
=== Readings ===<br />
Eine Auswahl der Readings, die das angelegte Twilight-Objekt enthält:<br />
;sr*<br />
:verschiedene Werte für den Sonnenaufgang ("'''s'''un'''r'''ise"): astronomisch, bürgerlich, nautisch, ...<br />
;ss*<br />
:verschiedene Werte für den Sonnenuntergang ("'''s'''un'''s'''et"): astronomisch, bürgerlich, nautisch, ...<br />
;nextEvent<br />
:Name des Ereignisses, das als nächstes eintreten wird (z.&nbsp;B. "ss_weather")<br />
;nextEventTime<br />
:Zeitpunkt, zu dem das (unter ''nextEvent'' benannte) nächste Ereignis eintreten wird<br />
;light<br />
:ein errechneter Helligkeitswert mit den folgenden möglichen Werten (zwischen 0 und 6):<br />
:;0<br />
::Völlige Dunkelheit; relativer Sonnenstand zum Horizont: -18&deg;<br />
:;1<br />
::astronomische Dämmerung; relativer Sonnenstand zum Horizont: zwischen -12&deg; und -18&deg;<br />
:;2<br />
::nautische Dämmerung; relativer Sonnenstand zum Horizont: zwischen -6&deg; und -12&deg;<br />
:;3<br />
::bürgerliche Dämmerung; relativer Sonnenstand zum Horizont: zwischen 0&deg; und -6&deg;<br />
:;4<br />
::"indoor"-Dämmerung; Sonnenstand zwischen '''indoor_horizon''' (sofern der Wert ungleich Null ist) und 0&deg;<br />
:;5<br />
::"Wetter"-Dämmerung; Sonnenstand zwischen '''indoor_horizon''' und einem virtuellen Wetter-Horizont (abhängig von der Angabe einer '''Weather_position''')<br />
:;6<br />
::"normales" Tageslicht<br />
;azimuth<br />
:Azimut; Horizontalwinkel des Sonnenstands (0&deg;=Norden, 180&deg;=Süden, usw.)<br />
;elevation<br />
:Höhe des Sonnenstands<br />
;twilight<br />
:Dämmerungswert, errechnet aus der Höhe des Sonnenstands. Der Wert geht von 0% bis 100% bei einem Sonnenstand zwischen -12&deg; und 6&deg; (also während der Dämmerungsphase).<br />
<br />
=== Funktionen ===<br />
:<code>twilight($twilight, $reading, $min, $max)</code><br />
Funktion im Modul, um bei der Dämmerungsberechnung Minimal-/Maximalwerte ("frühestens/spätestens") spezifizieren und das Ergebnis beispielsweise in einem <code>at</code> weiterverarbeiten zu können.<br />
<br />
== Anwendungsbeispiel(e) ==<br />
=== Kurzes Beispiel ===<br />
Anwendung der Funktion ''twilight'' zur Zeitsteuerung:<br />
:<code>define morgens at *{twilight("myTL","sr_indoor","7:30","9:00")} set Rollo on</code><br />
Dieses '''at''' wird morgens zum Zeitpunkt ''sr_indoor'' des Twilight Objekts ''myTL'' - aber frühestens um 7:30 und spätestens um 9:00 Uhr - dem Gerät ''Rollo'' einen ''on''-Befehl schicken. Das Objekt ''myTL'' muss natürlich vorher mit (beispielsweise) <br />
:<code>define myTL Twilight 44.444444 8.888888 ...</code><br />
definiert worden sein.<br />
<br />
=== Ausführliches Beispiel ===<br />
[[Twilight Anwendungsbeispiel]] mit detaillierten Erläuterungen<br />
<br />
== Links ==<br />
* ...<br />
<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Twilight&diff=15854Twilight2016-07-19T15:18:26Z<p>No Legend: Anpassung des Azimuth Erklärung nach Commandref</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Virtuelles Gerät zur Berechnung der Dämmerungszustände für eine gegebene Position<br />
|ModType=h<br />
<!-- |ModCategory=?? --><br />
<!-- |ModCmdRef=[http://forum.fhem.de/index.php/topic,19922.0.html siehe Forum] --><br />
|ModTechName=59_Twilight.pm<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModOwner=dietmar63 / [http://forum.fhem.de/index.php?action=profile;u=405 Dietmar63]<br />
}}<br />
<br />
[[Twilight]] ist ein Hilfsmodul, das für eine über Koordinaten spezifizierte Position diverse Dämmerungszustände, Zeiten und die Helligkeit berechnet und als Readings bereitstellt. Darüber hinaus werden auch, sofern spezifiziert, über die Yahoo Wetter-ID Wetterinformationen bereitgestellt bzw. in die Berechnungen mit einbezogen.<br />
<br />
== Voraussetzungen ==<br />
Keine.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
:<code>define <name> Twilight <latitude> <longitude> [<indoor_horizon> [<Weather_Position>]]</code><br />
Die Bedeutung der Parameter:<br />
;latitude / longitude<br />
:Geokoordinaten, für die die Werte berechnet werden sollen<br />
;indoor_horizon<br />
:Virtueller Horizont <br />
;Weather_Position<br />
:Yahoo Wetter-ID für den gewünschten Standort; der eingegebene Wert wird als "internal value" '''WEATHER''' gespeichert.<br />
<br />
=== Attribute ===<br />
<br />
=== Readings ===<br />
Eine Auswahl der Readings, die das angelegte Twilight-Objekt enthält:<br />
;sr*<br />
:verschiedene Werte für den Sonnenaufgang ("'''s'''un'''r'''ise"): astronomisch, bürgerlich, nautisch, ...<br />
;ss*<br />
:verschiedene Werte für den Sonnenuntergang ("'''s'''un'''s'''et"): astronomisch, bürgerlich, nautisch, ...<br />
;nextEvent<br />
:Name des Ereignisses, das als nächstes eintreten wird (z.&nbsp;B. "ss_weather")<br />
;nextEventTime<br />
:Zeitpunkt, zu dem das (unter ''nextEvent'' benannte) nächste Ereignis eintreten wird<br />
;light<br />
:ein errechneter Helligkeitswert mit den folgenden möglichen Werten (zwischen 0 und 6):<br />
:;0<br />
::Völlige Dunkelheit; relativer Sonnenstand zum Horizont: -18&deg;<br />
:;1<br />
::astronomische Dämmerung; relativer Sonnenstand zum Horizont: zwischen -12&deg; und -18&deg;<br />
:;2<br />
::nautische Dämmerung; relativer Sonnenstand zum Horizont: zwischen -6&deg; und -12&deg;<br />
:;3<br />
::bürgerliche Dämmerung; relativer Sonnenstand zum Horizont: zwischen 0&deg; und -6&deg;<br />
:;4<br />
::"indoor"-Dämmerung; Sonnenstand zwischen '''indoor_horizon''' (sofern der Wert ungleich Null ist) und 0&deg;<br />
:;5<br />
::"Wetter"-Dämmerung; Sonnenstand zwischen '''indoor_horizon''' und einem virtuellen Wetter-Horizont (abhängig von der Angabe einer '''Weather_position''')<br />
:;6<br />
::"normales" Tageslicht<br />
;azimuth<br />
:Azimut; Horizontalwinkel des Sonnenstands (0&deg;=Norden, 180%´&deg;=Süden, usw.)<br />
;elevation<br />
:Höhe des Sonnenstands<br />
;twilight<br />
:Dämmerungswert, errechnet aus der Höhe des Sonnenstands. Der Wert geht von 0% bis 100% bei einem Sonnenstand zwischen -12&deg; und 6&deg; (also während der Dämmerungsphase).<br />
<br />
=== Funktionen ===<br />
:<code>twilight($twilight, $reading, $min, $max)</code><br />
Funktion im Modul, um bei der Dämmerungsberechnung Minimal-/Maximalwerte ("frühestens/spätestens") spezifizieren und das Ergebnis beispielsweise in einem <code>at</code> weiterverarbeiten zu können.<br />
<br />
== Anwendungsbeispiel(e) ==<br />
=== Kurzes Beispiel ===<br />
Anwendung der Funktion ''twilight'' zur Zeitsteuerung:<br />
:<code>define morgens at *{twilight("myTL","sr_indoor","7:30","9:00")} set Rollo on</code><br />
Dieses '''at''' wird morgens zum Zeitpunkt ''sr_indoor'' des Twilight Objekts ''myTL'' - aber frühestens um 7:30 und spätestens um 9:00 Uhr - dem Gerät ''Rollo'' einen ''on''-Befehl schicken. Das Objekt ''myTL'' muss natürlich vorher mit (beispielsweise) <br />
:<code>define myTL Twilight 44.444444 8.888888 ...</code><br />
definiert worden sein.<br />
<br />
=== Ausführliches Beispiel ===<br />
[[Twilight Anwendungsbeispiel]] mit detaillierten Erläuterungen<br />
<br />
== Links ==<br />
* ...<br />
<br />
[[Kategorie:Code Snippets]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&diff=15582Homebridge einrichten2016-06-15T11:08:16Z<p>No Legend: Fehler während des Manuellen Starts hinzu / Falsche Nodes Version, mit DNS Fehler.</p>
<hr />
<div>Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge. <br />
<br />
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspian getestet). Der WIKI-Eintrag bezieht sich hauptsächlich auf eine {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.<br />
<br />
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekot-Plugins ist in einem neuen {{Link2Forum|Topic= 48558 |LinkText=Thread im FHEM-Forum}} beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.<br />
<br />
Eine Sammlung funktionsfähiger Homebridge FHEM Konfiguration kann hier gefunden werden: [[Homebridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.<br />
<br />
= Vorbereitung der Umgebung =<br />
<br />
== NodeJS installieren ==<br />
''Die nachfolgenden Befehle sind alle mit "sudo" prefixed. Wenn du unter "root" arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.''<br />
<br />
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:<br />
<source lang="bash" style="width:50%;"><br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
sudo apt-get install build-essential libssl-dev</source><br />
<br />
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:<br />
<br />
'''NodeJS V4'''<br />
<source lang="bash" style="width:50%;"><br />
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</source><br />
<br />
{{Randnotiz|RNTyp=y|RNText=Bei Installation von NodeJS auf einem "alten" RasPi (B) bitte die besonderen Hinweise in {{Link2Forum|Topic=32652|Message=419325|LinkText=diesem Forenbeitrag}} beachten.}}<br />
'''NodeJS V5'''<br />
<source lang="bash" style="width:50%"><br />
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</source><br />
<br />
Damit ist NodeJS installiert.<br />
<br />
== Python, g++, MDNS installieren ==<br />
<source lang="bash" style="width:50%;"><br />
sudo apt-get install python g++ libavahi-compat-libdnssd-dev<br />
</source><br />
<br />
Nun sind alle Voraussetzungen geschaffen.<br />
<br />
= Installation von Homebridge & notwendiger Shims =<br />
Im Nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert.<br />
<br />
== Homebridge installieren ==<br />
Die aktuelle Homebridge version wird mit<br />
<source lang="bash" style="width:50%;"><br />
npm install -g homebridge<br />
</source><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<source lang="bash" style="width:60%;"><br />
npm install -g homebridge-fhem<br />
</source><br />
installiert.<br />
<br />
== Homebridge aktualisieren ==<br />
Die aktuelle Homebridge version wird mit<br />
<source lang="bash" style="width:50%;"><br />
npm update -g homebridge<br />
</source><br />
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:<br />
<source lang="bash" style="width:60%;"><br />
npm update -g homebridge-fhem<br />
</source><br />
installiert.<br />
<br />
=== Fehler während der Installation ===<br />
Bei folgendem Fehler ist das Abrufen von Github nicht möglich.<br />
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror <br />
git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: <br />
github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen</pre><br />
Fehler könnte hier durch eine aktive Firewall verursacht werden.<br />
<br />
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via<br />
<source lang="bash" style="width=50%"><br />
sudo apt-get install avahi-daemon<br />
</source><br />
<br />
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, dass "dns_sd.h" nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via<br />
<source lang="bash" style="width=50%"><br />
sudo apt-get install libavahi-compat-libdnssd-dev<br />
</source><br />
<br />
= Homebridge konfigurieren =<br />
''Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizierten Nutzer für homebridge oder der Einfachheit halber den Nutzer, unter dem auch FHEM läuft (meist "fhem").''<br />
<br />
== Einstellungen für homebridge ==<br />
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:<br />
<source lang="bash" style="width:50%;"><br />
mkdir -p ~/.homebridge<br />
cd ~/.homebridge/<br />
</source><br />
<br />
Nun muss darin noch die config.json erstellt bzw. angepasst werden:<br />
<source lang="bash" style="width:50%;"><br />
nano ~/.homebridge/config.json<br />
</source><br />
<br />
Hinweise zur Konfiguration:<br />
* "''bridge''":<br />
** "''username''": Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.<br />
** "''port''": Sollte so belassen werden<br />
** "''pin''": Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.<br />
* "''platforms''": <br />
** "''platform''": Hier muss "FHEM" beibehalten werden.<br />
** "''server''": Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.<br />
** "''port''": Hier muss der Port des gewählten FHEMWEBS eingetragen werden (muss nicht das "normale" sein, kann eine extra Instanz sein)<br />
** "''auth''": Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.<br />
** "''filter''": Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.<br />
<source lang="javascript" style="width:50%;"><br />
{<br />
"bridge": {<br />
"name": "Homebridge",<br />
"username": "CC:22:3D:E3:CE:30",<br />
"port": 51826,<br />
"pin": "031-45-154"<br />
},<br />
<br />
"platforms": [<br />
{<br />
"platform": "FHEM",<br />
"name": "FHEM",<br />
"server": "127.0.0.1",<br />
"port": "8083",<br />
"auth": {"user": "FhemUser", "pass": "XXX"},<br />
"filter": "room=Homekit"<br />
}<br />
],<br />
<br />
"accessories": []<br />
}<br />
</source><br />
<br />
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:<br />
<source lang="javascript" style="width:50%;"><br />
"ssl": true,<br />
</source><br />
<br />
= FHEM konfigurieren =<br />
Die benötigten Attribute werden inzwischen beim ersten Start des von hombridge-fhem automatisch auf FHEM Seite eingetragen.<br />
<br />
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im {{Link2Forum|Topic= 48558 |LinkText=Diskussion im FHEM-Forum}}<br />
<br />
= Start von Homebridge =<br />
<br />
== Hinweis ==<br />
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.<br />
<br />
== Einmaliger Manueller Start ==<br />
<source lang="bash" style="width:50%;"><br />
homebridge<br />
</source><br />
<br />
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitten nächsten Punkt beachten.<br />
<br />
=== Fehler während des Manuellen Starts ===<br />
Kommt ein Fehler der ähnlich aussieht wie folgender, sollte zu erst die Nodesversion geprüft werden.<br />
Die Nodes version kann durch ein System Update auf eine niedrigere Version wie benötigt gedowngraded werden<br />
<source lang="bash" style="width=50%"><br />
Error: Module version mismatch. Expected 47, got 46.<br />
at Error (native)<br />
at Object.Module._extensions..node (module.js:450:18)<br />
at Module.load (module.js:356:32)<br />
at Function.Module._load (module.js:313:12)<br />
at Module.require (module.js:366:17)<br />
at require (module.js:385:17)<br />
at Object.<anonymous> (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:24:20)<br />
at Module._compile (module.js:425:26)<br />
at Object.Module._extensions..js (module.js:432:10)<br />
at Module.load (module.js:356:32)<br />
</source><br />
Geprüft werden kann die Nodes Version mit:<br />
<source lang="bash" style="width=50%">node -v zeigt mir: v0.10.28, nodejs -v: v5.11.1</source><br />
Hier ist die Version v0.10.28 wobei v0.12 Mindestvorraussetzung ist.<br />
Die installation der richtigen Nodes Version kann oben am Anhang des Wiki Artikels entnommen werden.<br />
<br />
<br />
== Homebridge automatisch starten ==<br />
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.<br />
<br />
=== Steuerung via FHEM ===<br />
Auf Basis der unten stehenden ''Alternativen Methode'' wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite [[Homebridge Start und Status in FHEM]] im Detail beschrieben.<br />
<br />
=== Alternative Methode ===<br />
Dies startet homebridge als einen Service.<br />
<br />
==== Service anlegen ====<br />
<code><br />
sudo nano /etc/init.d/homebridge<br />
</code><br />
<br />
Code einfügen (startet den Homebridge Server als Benutzer "pi" und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):<br />
<br />
<source lang=bash><br />
#!/bin/sh<br />
### BEGIN INIT INFO<br />
# Provides: homebridge<br />
# Required-Start: $network $remote_fs $syslog<br />
# Required-Stop: $remote_fs $syslog<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: Start daemon at boot time for homebridge<br />
# Description: Enable service provided by daemon.<br />
### END INIT INFO<br />
export PATH=$PATH:/usr/local/bin<br />
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules<br />
PID=`pidof homebridge`<br />
case "$1" in<br />
start)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is already running"<br />
else<br />
su - pi -c "homebridge > /dev/null 2>&1 &"<br />
echo "Homebridge starting"<br />
$0 status<br />
fi<br />
;;<br />
stop)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is not running"<br />
else<br />
kill $PID<br />
echo "Homebridge closed"<br />
fi<br />
;;<br />
restart)<br />
if ! ps -p $PID > /dev/null 2>&1; then<br />
$0 start<br />
else<br />
$0 stop<br />
$0 start<br />
fi<br />
;;<br />
status)<br />
if ps -p $PID > /dev/null 2>&1; then<br />
echo "Homebridge is running PID $PID"<br />
else<br />
echo "Homebridge is not running"<br />
fi<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop|status|restart}"<br />
exit 1<br />
;;<br />
esac<br />
exit 0<br />
</source><br />
<br />
==== Autostart aktivieren ====<br />
<br />
<code><br />
sudo chmod 755 /etc/init.d/homebridge<br />
<br />
sudo update-rc.d homebridge defaults<br />
</code><br />
<br />
Nun kann man mit <br />
<br />
<code><br />
sudo service homebridge start<br />
</code><br />
<br />
bzw.<br />
<br />
<code><br />
sudo /etc/init.d/homebridge start<br />
</code><br />
<br />
den Dienst starten<br />
<br />
== FHEM Device Einstellungen ==<br />
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden muss man sie im Raum Homekit hinzufügen.<br />
<br />
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device "Heizung"):<br />
# attr Heizung subtype thermostat<br />
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:<br />
# attr Dummy genericDeviceType switch<br />
# attr Dummy setList on off<br />
<br />
Wie bereits vorher angemerkt: fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.<br />
<br />
= HomeKit in iOS =<br />
<br />
== Einrichtung ==<br />
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden. <br />
<br />
Es gibt verschiedene Apps. Im Folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss.<br />
In der App auf:<br />
<pre style="width:50%;"><br />
Gerät hinzufügen<br />
</pre><br />
Es sollte ein Gerät mit der Bezeichnung "Homebridge" zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):<br />
<pre style="width:50%;"><br />
031-45-154<br />
</pre><br />
eingeben.<br />
<br />
Im Anschluss können die Devices nach Belieben in verschiedene Räume zugeteilt werden, sowie Szenen und Bereiche erstellt werden.<br />
<br />
== Schalten mit Siri ==<br />
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:<br />
<pre style="width:50%;"><br />
"Schalte alle Lampen im Obergeschoss ein."<br />
"Schalte Chloes Licht aus."<br />
"Dimme das Licht in der Küche."<br />
"Dimme das Licht im Esszimmer auf 50 %."<br />
"Stelle das Licht in der Küche am hellsten ein."<br />
"Stelle die Temperatur im Tahoe-Haus auf 22 °C ein."<br />
"Stelle das Thermostat im Erdgeschoss auf 21 °C ein.<br />
"Schalte den Drucker im Büro ein."<br />
"Siri, bereite alles für eine Party vor."<br />
"Bereite das Ambiente fürs Abendessen vor."<br />
"Aktiviere den Nachtruhemodus."<br />
</pre><br />
<br />
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.<br />
<br />
= Hinweise =<br />
<br />
== Unterstützte Geräte ==<br />
Das Fhem Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt automatisch mindestens die folgenden Geräte:<br />
<br />
switches (devices with set on and set off commands)<br />
lights (devices with set on and set off commands)<br />
HomeMatic, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands)<br />
HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb)<br />
homematic, max and pid20 thermostats<br />
homematic, DUOFERN and FS20/IT(?) blinds<br />
homematic, MAX and FHTTK contact sensors (door, window)<br />
HM-SEC-WIN, HM-SEC-KEY<br />
presence, ROOMMATE<br />
SONOS (power, volume)<br />
harmony scenes<br />
temperaturecw and humidity sensors<br />
CO20 air quality sensor<br />
probably some more ...<br />
<br />
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit typen abbilden.<br />
<br />
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich [https://www.npmjs.com/package/homebridge-fhem auf den npmjs seiten] bzw. [https://github.com/justme-1968/homebridge-fhem auf github].<br />
<br />
== Zusätzliche Plugins ==<br />
Für manche der über FHEM steuerbaren Geräte wie z.b. MiiLight, Harmony Hub, Phillips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich, empfiehlt es sich aber diese '''nicht''' zu verwenden, sondern die Steuerung über die FHEM-Integration zu realisieren, da<br />
* diese in der Regel sehr viel mächtiger und frei konfigurierbar ist<br />
* es FHEM erlaubt, als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten, die gepollt werden) <br />
* die Ressourcen auf den angesteuerten Geräten schont, da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird<br />
<br />
== Hinweis für alte homebridge Versionen ==<br />
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut<br />
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:<br />
<pre><br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"<br />
</pre><br />
<br />
== Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI ==<br />
<br />
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen, auch diverse Abhängigkeiten aus der '''package.json''' zu entfernen:<br />
<pre><br />
"ad2usb": "git+https://github.com/alistairg/node-ad2usb.git#local",<br />
"carwingsjs": "0.0.x",<br />
"chokidar": "^1.0.5",<br />
"eibd": "^0.3.1",<br />
"elkington": "kevinohara80/elkington",<br />
"harmonyhubjs-client": "^1.1.4",<br />
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git",<br />
"lifx-api": "^1.0.1",<br />
"lifx": "git+https://github.com/magicmonkey/lifxjs.git",<br />
"node-hue-api": "^1.0.5",<br />
"node-icontrol": "^0.1.4",<br />
"node-milight-promise": "0.0.x",<br />
"tough-cookie": "^2.0.0",<br />
"sonos": "0.8.x",<br />
"telldus-live": "0.2.x",<br />
"teslams": "1.0.1",<br />
"unofficial-nest-api": "git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98",<br />
"wemo": "0.2.x",<br />
"wink-js": "0.0.5",<br />
"komponist" : "0.1.0",<br />
"yamaha-nodejs": "0.4.x",<br />
</pre><br />
<br />
Daher zunächst ein ein Backup der Datei anlegen <br />
<pre>sudo cp package.json package.json.bkp </pre><br />
Am einfachsten geht das entfernen der Zeilen mit einem Editor, beispielsweise nano oder vi.<br />
<pre>sudo nano package.json</pre><br />
<br />
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.<br />
<source lang="javascript"><br />
{<br />
"name": "homebridge",<br />
"description": "HomeKit support for the impatient",<br />
"version": "0.1.1",<br />
"scripts": {<br />
"start": "DEBUG=* node app.js || true"<br />
},<br />
"repository": {<br />
"type": "git",<br />
"url": "git://github.com/nfarina/homebridge.git"<br />
},<br />
"license": "ISC",<br />
"dependencies": {<br />
"async": "^1.4.2",<br />
"color": "0.10.x",<br />
"debug": "^2.2.0",<br />
"hap-nodejs": "^0.0.2",<br />
"isy-js": "",<br />
"mdns": "^2.2.4",<br />
"netatmo": "1.3.0",<br />
"node-cache": "3.0.0",<br />
"node-persist": "0.0.x",<br />
"node-xmpp-client": "1.0.0-alpha23",<br />
"q": "1.4.x",<br />
"queue": "^3.1.0",<br />
"request": "2.49.x",<br />
"xml2js": "0.4.x",<br />
"xmldoc": "0.1.x"<br />
}<br />
}<br />
</source><br />
<br />
[[Kategorie:HOWTOS]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=14535FRITZBOX2016-03-05T18:45:44Z<p>No Legend: /* Anwendungsbeispiele */ "Ring auf mehreren Telefonen gleichzeitig" hinzu</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über Fhem<br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch Fhem. An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Bespiele ===<br />
* Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
* Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings Mobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Diese Datei kann man auch über das Attribute ''m3uFileLocal'' vorgeben.<br><br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die Web-Adresse der entsprechenden Datei eingetragen werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL selber zu ermitteln. Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>No Legendhttp://wiki.fhem.de/w/index.php?title=HM-Sen-DB-PCB_Klingelsignalsensor&diff=14225HM-Sen-DB-PCB Klingelsignalsensor2016-02-17T09:49:09Z<p>No Legend: Biespiel zum Auslesen</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=PlatzHalter.png<br />
|Bildbeschreibung=<br />
|HWProtocol=BidCoS ([[HomeMatic]])<br />
|HWType=Sensor<br />
|HWCategory=Sensor<br />
|HWComm=868,3&nbsp;MHz<br />
|HWChannels=1<br />
|HWVoltage=3&nbsp;V<br />
|HWPowerConsumption=30&nbsp;mA (max)<br />
|HWPoweredBy=2x1,5&nbsp;V (Micro/AAA/LR03)<br />
|HWSize=68 x 127 x 23 mm (mit Antenne), 68 x 58 x 23 mm (ohne Antenne)<br />
|HWDeviceFHEM=[[CUL_HM]]<br />
|HWManufacturer=ELV / eQ-3 <br />
}}<br />
<br />
[[HM-Sen-DB-PCB]] ist ein Funk-Klingelsignalsensor, der auf externe Signalspannung reagiert und angelernte HomeMatic-Geräte über Funk steuert.<br />
<br />
== Features / Funktionen ==<br />
Die auslösende Signalspannung kann sowohl Gleich- und Wechselspannungen sein die zwischen 5 und 12 V liegt. Das Gerät kann somit direkt in eine bestehende Klingelanlage integriert werden. Alternativ kann ein potentialfreier Taster zur Auslösung verwendet werden.<br />
* Als Sensor zur Spannungserkennung oder als Taster-Sender einsetzbar<br />
* Kann andere HomeMatic-Geräte direkt ansteuern oder Anbindung über Fhem möglich<br />
* lange Batterielebensdauer (ca. 5 Jahre)<br />
<br />
== Hinweise zum Betrieb mit Fhem ==<br />
Das Pairing sollte wie unter [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.<br />
<br />
== Bekannte Probleme ==<br />
Der Klingelsignalsensor sendet keine zyklische Statusmeldung und Batterieüberwachung. Erst bei Signalerkennung sendet das Gerät den erkannten Tastendruck und liefert den aktuellen Status.<br />
<br />
== Beispiel zu Auslesen ==<br />
Das Beispiel zeigt wie der Klingelsensor ausgelesen werden kann um damit Aktionen auszuführen.<br />
Der Code wurde direkt aus dem fhem.cfg kopiert.<br />
<br />
define 1OG.KLINGEL.DOIF DOIF ([1OG.KLINGEL:?Short]) \<br />
(\<br />
set 2OG.WHZ.CABTV1 msg yesno 15 1OG.KLINGEL - Es steht jemand vor der Tür, \<br />
set 1OG.SZ.CABTV1 msg yesno 15 1OG.KLINGEL - Es steht jemand vor der Tür, \<br />
set pushmsg.fhemapp.* message '1OG.KLINGEL Es steht jemand vor der Tür', \<br />
set FritzBox ring 610 15 show:Türklingel\<br />
)<br />
<br />
<br />
<br />
== Weblinks ==<br />
* [http://www.elv.de/homematic-funk-klingelsignalsensor-bausatz.html Produktbeschreibung bei ELV]<br />
<br />
[[Kategorie:HomeMatic Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Universalsensor&diff=13240Universalsensor2015-12-13T15:39:39Z<p>No Legend: /* Der Helligkeitssensor */</p>
<hr />
<div>[[Datei:Universalsensor-CC1101-Innen.jpg|200px|thumb|right|Universalsensor im Innengehäuse]]<br />
[[Datei:Universalsensor-CC1101-Aussen.jpg|200px|thumb|right|Universalsensor im Außengehäuse]]<br />
<br />
== Übersicht ==<br />
Die Universalsensor-Platine ist eine Hardwareplattform um verschiedene Sensorwerte auch über unterschiedliche Übertragungsverfahren z.B. für die eigene Homeautomatisierung verfügbar zu machen.<br />
<br />
Hier werden die unterschiedliche Platinenlayouts, welche z.B. für einen Innensensor und einen Außensensor verwendet werden können, vorgestellt.<br />
<br />
Als Übertragungsmedien sind ein Funkmodul (CC1101) oder ein RS485 Tranceiver (LT1785 oder kompatibel) vorgesehen.<br />
<br />
Mit dem Funkmodul ist eine Anbindung an Funksysteme im 868 Mhz oder auch 433 Mhz-Band möglich. Hiermit kann der Sensor z.B. in ein Homematic Funksystem integriert werden. Aber auch andere Funksysteme sind über eine entsprechende Firmware zu realisieren.<br />
<br />
Mit dem RS485 Tranceiver ist z.B. auch eine Integration in das Homematic-Wired System möglich.<br />
<br />
Das Platinenlayout der Sensoren enthält zwei Pinleisten welche Arduino-Kompatibel sind. Als Mikrocontroller ist ein Atmega 328p bestückt.<br />
<br />
Über diese Erweiterungsports können auch zusätzlich eigene Sensoren oder auch Aktoren angeschlossen werden, diese müssen dann aber über eine Erweiterung der bestehenden Firmware oder mit eine eigene Firmware angesprochen werden.<br />
<br />
Die Spannungsversorgung erfolgt über 2 AA bzw. AAA Batterien. Damit eine möglichst gute Ausnutzung der Batteriekapazität erzielt wird und auch Sensoren mit 3,3 V Spannungsversorgung benutzt werden können, kann ein MAX1724 Stepup-Converter bestückt werden. Dieser stellt eine stabile Spannungsversorgung von 3,3&nbsp;V zur Verfügung. Als Mindest-Eingangsspannung sind hier dann lediglich 1,2&nbsp;V notwendig. Somit ist eine Versorgung auch aus nur einer Batteriezelle denkbar.<br />
<br />
Alternativ kann eine Spannungsversorgung über einen Schaltregler erfolgen. Diese Versorgung kommt bei der Bestückungsversion mit RS485-Tranceiver zum Einsatz. Aber auch bei Benutzung mit dem Funkmodul kann diese Spannungsversorgung eingesetzt werden.<br />
<br />
Der Schaltregler erlaubt dann einen recht breiten Eingangsspannungsbreich von 7 V bis 24 V. Außerdem steht dann intern zusätzlich zu den 3,3 V eine Spannung von 5 V zur Verfügung.<br />
<br />
== Innensensor ==<br />
[[Datei:Universalsensor-CC1101-Innen platine.jpg|200px|thumb|right|Universalsensor-Platine für das Innengehäuse. Hier noch ohne Bestückungsoption für RS485 und ohne bestückten SHT10 (Temperatur / Luftfeuchte)]]<br />
<br />
Das Layout des Innensensors unterstützt standardmäßig folgende Sensorbestückung:<br />
* Temperatur / Feuchte (STH10)<br />
* Temperatur / Luftdruck (BMP180)<br />
* Helligkeit (TSL2561)<br />
Zusätzlich können über die zwei Pinleisten eigene Sensoren z.B. über eine Erweiterungsplatine angeschlossen werden. Als Beispiel ist hier eine Firmwareversion genannt, bei der mehrere 1-Wire Sensoren an den Sensor angeschlossen werden und abgefragt werden können.<br />
Zusätzlich zu den unterschiedlichen bestückbaren Sensoren, kann der Innensensor alternativ zum Funkmodul mit einem RS485 Tranceiver bestückt werden.<br />
Als Spannungsversorgung steht eine Batterieversorgung (1,2 - 3V) oder eine Spannungsversorgung über einen Schaltregler (7 V - 24 V zur Verfügung)<br />
<br />
== Außensensor ==<br />
[[Datei:Universalsensor-CC1101-Aussen_platine.jpg|200px|thumb|right|Universalsensor-Platine für das Außengehäuse mit Beschreibung der I2C-Anschlussbelegung.]]<br />
<br />
Die Platinengröße des Außensensors ist deutlich kompakter als der Innensensor. Daher ist in dieser Version derzeit nur das Funkmodul bestückbar. Andere Übertragungsverfahren wie z.B. RS485 müssten hier extern realisiert werden.<br />
Das Layout des Außensensors unterstützt standardmäßig folgende Sensorbestückung:<br />
* Temperatur / Luftdruck (BMP180)<br />
* Helligkeit (TSL2561)<br />
Weitere Sensoren z.B. ein STH10 für Temperatur/Luftfeuchte können über den nach außen geführten I2C-Bus angeschlossen werden. Natürlich existiert auch beim Außensensor die Möglichkeit weitere Sensoren oder auch Aktoren über die beiden Pinleisten anzuschließen.<br />
<br />
Dieser {{Link2Forum|Topic=20620|Message=182690|LinkText=Forenbeitrag}} beschreibt, wie der SHT10 auch innerhalb eines Gehäuses benutzt werden kann.<br />
<br />
Um die Platine im Gehäuse zu fixieren, wird auf einer Seite des Batteriehalters ein kleiner Schaumstoffblock aufgeklebt (siehe nebenstehendes Foto)<br />
<br />
== Der Helligkeitssensor ==<br />
[[Datei:SHT10_breakout.jpg|200px|thumb|right|SHT10 Breakout-Board für den Außensensor.]]<br />
[[Datei:CC1101-Sensor-Außen_mit_Filterfolie.JPG|200px|thumb|right|Das Außengehäuse mit Filterfolie.]]<br />
[[Datei:Innensensor_Loch_für_Acrylstab_Maße.jpg|200px|thumb|right|Bohrvorlage für den Acrylstab im Innengehäuse.]]<br />
Der Helligkeitssensor braucht zum sinnvollen Einsatz natürlich die Möglichkeit vom Umgebungslicht beleuchtet zu werden.<br />
Da der Sensor im Innengehäuse nahe der Lüftungsschlitzen sitzt, wird dieser dadurch bereits beleuchtet. Allerdings fällt hier nur wenig Licht auf den Sensor. Daher ist bei dieser Messmethode die erreichbare Auflösung sehr gering.<br />
<br />
Die bessere Möglichkeit ist es, in die Abdeckung des Sensorgehäuses ein 5 mm großes Loch zu bohren. In das Loch wird dann ein kurzer Stift aus Acrylglas eingesetzt. Siehe Bild mit der Bohrvorlage. Achtung, das Loch ist in horizontaler Ausrichtung nicht genau mittig.<br />
Der Acrylstab hat nicht genau 5 mm Durchmesser. Es sind 5,2 mm. Man kann dennoch ein 5 mm Loch bohren. Das Einschieben des Stabes in das Loch geht dann allerdings ziemlich schwer. Vor dem Einschieben kann man den Acrylstab an der Innenseite noch leicht anfasen. Dann lässt er sich leichter in das Loch schieben. Die Länge des Acrylstabes Beträgt 17 mm.<br />
<br />
Im Außensensor ist die ausreichende Beleuchtung bereits durch die transparente Gehäuseoberseite gewährleistet. Allerdings wird der Sensor in direkter Sonneneinstrahlung übersteuern. Daher kann hier zwischen Sensor und Deckel eine Filterfolie eingelegt werden.<br />
Die getestete Filterfolie lässt dann nur noch etwa 25% des Lichtes durch. Dadurch ist eine Lage ausreichend, damit der Sensor auch im Sommer bei voller Sonneneinstrahlung nicht mehr übersteuert. Durch den bekannten Filterwert der Folie lässt sich so auch gut ein Umrechnungsfaktor für die Heligkeitsmessung in Lux z.B. in FHEM hinterlegen.<br />
<br />
Eine Testreihe mit der Folie im Vergleich mit einem kommerziellen Luxmeter hat den Faktor 0,265 ergeben.<br />
<br />
Mit Folie bekommt man mit einer Division durch 0,265 auf den aktuellen Lux-Wert:<br />
<br />
$lux = $lum/0.265<br />
<br />
Um den Wert mit Folie unterhalb des Devices angezeigt zu bekommen, muss man hierfür ein userreading erstellten.<br />
Die erfolgt mit folgendem Befehl:<br />
<br />
<code><br />
attr Outdoor.Helligkeit userReadings luminosity2 { ReadingsVal("Outdoor.Helligkeit","luminosity",0)/0.265;; }<br />
</code><br />
<br />
Das Devices hier im Beispiel Outdoor.Helligkeit muss gegen den eigenen Device Namen ausgetauscht werden.<br />
<br />
Werden zwei Folien benutzt muss der Wert von 0.265 angepasst werden.<br />
<br />
Nun ist es möglich den Richtigen wert unter dem Reading luminosity2 abzufragen<br />
<br />
== Firmware ==<br />
[[Datei:CC1101-Sensor_Firmwareupdate_mit_dem_Raspberry_Pi.jpg|200px|thumb|right|Firmwareupdate mit dem Raspberry Pi.]]<br />
<br />
Aktuell existieren für den Sensor zwei verschiedene Firmwareversionen.<br />
<br />
* [[HB-UW-Sen-THPL]] HB-UW-Sen-THPL-I, HB-UW-Sen-THPL-O (Version 0.14)<br />
: Homematic-Kompatibler Temperatur / Feuchte / Luftdruck / Helligkeitssensor für das Innengehäuse oder Außengehäuse<br />
<br />
* HWB-ONEWIRE (Experimentel)<br />
: Homematic-Wired Kompatibles 1-Wire-Temperatursensor-interface<br />
<br />
HB-UW-Sen-THPL-I und HB-UW-Sen-THPL-O unterscheiden sich nur durch die Geräte-ID. Dadurch ist es Möglich dass die Sensoren z.B. in der CCU über ein eigenes Icon verfügt.<br />
<br />
'''Configtaster'''<br />
<br />
Drückt man den Configtaster auf der Platine im Betrieb 1x, so startet man das [[HomeMatic_Devices_pairen|Pairing]]. Die LED fängt langsam an zu blinken. Drückt man den Taster nun nochmal, aber deutlich länger, blinkt die LED sehr schnell (jetzt loslassen). Jetzt kann der Sensor resettet werden. Dazu drückt man den Taster erneut, bis die LED ausgeht. Der Sensor hat sich nun zurückgesetzt.<br />
<br />
'''Firmwarekonfiguration'''<br />
<br />
Auf einige Einstellungen des Sensors lässt sich über die Kommandozeile Einfluss nehmen. Dazu "set <sensorname> regSet <register> <wert>" eingeben.<br />
<br />
;altitude<br />
:Die Höhe des Sensors über NN in Metern. Ist ein Luftdrucksensor vorhanden, dann wird der ermittelte Druck automatisch auf Druck in NN umgerechnet.<br />
;burstRx (noch experimentell)<br />
:Hierbei bleibt der Sensor dauerhaft Empfangsbereit bei höherem Batterieverbrauch. Damit soll es möglich sein, die Sensorwerte on demand vom Sensor anzufordern.<br />
;ledMode<br />
:''on'' die LED leuchtet, wenn der Sensor Daten überträgt, ''off'' die LED leuchtet beim Übertragen der Daten nicht<br />
;lowBatLimitTHPL<br />
:Batteriespannung, ab der die Warnung für den Batteriewechsel ausgegeben wird.<br />
;pairCentral<br />
:???<br />
;transmDevTryMax<br />
:Anzahl der Wiederholungssendungen, sofern kein ACK empfangen wurde.<br />
<br />
[[Datei:Universalsensor-RS485_mit_1-Wire-Sensoren.jpg|200px|thumb|right|Universalsensor-RS485-Version. Hier mit angeschlossenen 1-Wire Temperatursensoren]]<br />
<br />
[[Datei:Universalsensor-RS485-Innen_Platine.jpg|200px|thumb|right|Universalsensor-RS485-Version. Hier mit optional bestückten SHT10 (Temperatur / Luftfeuchte), BMP180 (Luftdruck), TSL2561 (Helligkeit)]]<br />
<br />
== OTA (OverTheAir) Firmwareupdate ==<br />
Die Firmware des Sensor lässt sich, sofern er den so genannten OTAU-Bootloader besitzt einfach per Funk updaten.<br />
OTA-Update = ('''O'''ver '''T'''he '''A'''ir, -Update also per Funk)<br />
<br />
Das Firmwareupdate funktioniert aktuell nur mit CUL/COC oder HM-CFG-USB unter Linux ([[HomeMatic_Firmware_Update#Firmware_Update_mit_CUL.2FHM-CFG-USB_unter_FHEM|Update mit CUL oder HM-CFG-USB unter Linux]]), mit dem "HomeMatic Firmware Update Tool" unter Windows ([[HomeMatic_Firmware_Update#Firmware_Update_mit_HM-CFG-USB_unter_Windows|Update mit HM-CFG-USB unter Windows]]) oder mit einer CCU2. Ein <code>set sensorname fwUpdate dateiname</code> in der Kommandozeile von FHEM funktioniert derzeit noch nicht.<br />
<br />
Für das Update mit flash-ota ist folgendes zu machen:<br />
<br />
# [[HomeMatic_Firmware_Update#Firmware_Update_mit_CUL.2FHM-CFG-USB_unter_FHEM|flash-ota herunterladen und installieren]].<br />
# Firmware aus dem ZIP rausholen: https://github.com/kc-GitHub/Wettersensor/archive/v0.14_beta.zip<br />
# flash-ota starten. Z.B. so: <code>sudo ./flash-ota -c /dev/ttyACM0 -f <firmware-file.eq3> -s <seriennummer></code><br />
# eine Batterie aus dem Sensor heraus nehmen, Configtaste drücken und gedrückt halten, Batterie wieder einlegen während die Configtaste weiter gedrückt bleibt.<br />
# Jetzt sollte der Updateprozess starten.<br />
# Sensor mit FHEM neu pairen. Dann erscheint auch die neue Firmwareversion in FHEM.<br />
<br />
== Weitere Firmwareupdate-Möglichkeiten ==<br />
<br />
Alternativ kann der Atmega328p auf der Platine mit einem Arduino-Kompatiblen Bootloader ausgerüstet werden.<br />
Damit lässt sich dann das Firmwareupdate per USB-UART-Adapter oder auch über den UART-Anschluss von einem [[Raspberry Pi]] einspielen.<br />
<br />
== RS485-Version mit 1-Wire Temperatursensoren ==<br />
Hier ist eine experimentelle Firmware mit der man derzeit die RS485-Version des Sensors in eine 1-Wire - Homematic-Wired Interface "verwandeln" kann.<br />
Weiteres ist unter [[ HWB-1WIRE-TMP10 ]] nachzulesen.<br />
<br />
== Inbetriebnahme ==<br />
# Batterien einlegen<br />
# Stelle sicher, dass das Konfigurationsmodul des Sensors "HMConfig_SenTHPL.pm" im Unterverzeichnis FHEM ist. Ist dem nicht so, [https://github.com/kc-GitHub/Wettersensor/blob/master/Contrib/FHEM/HMConfig_SenTHPL.pm lade die Datei herunter] und lege sie dort ab. Danach muss FHEM neu gestartet werden ("shutdown restart" in die Kommandozeile eingeben)<br />Achtung! Wer mit wget den normalen Link verwendet bekommt folgenden Fehler:<br /><code> Error loading file: /usr/share/fhem/FHEM/HMConfig_SenTHPL.pm: Unrecognized character \\xC2; marked by \<-- HERE after at master \<-- HERE near column 55 at /usr/share/fhem/FHEM/HMConfig_SenTHPL.pm line 13, <$fh> line 105.</code><br />Darum den raw Link verwenden:<br /><code><nowiki>sudo wget https://github.com/kc-GitHub/Wettersensor/raw/master/Contrib/FHEM/HMConfig_SenTHPL.pm</nowiki></code><br />
# [[HomeMatic_Devices_pairen|CUL in den Pairingmodus schalten]]<br />
# Configtaster auf dem Universalsensor drücken<br />
<br />
== Links ==<br />
* [https://github.com/kc-GitHub/Wettersensor Firmware der CC1101 (Funk) Version]<br />
* [https://github.com/kc-GitHub/HM485-Lib/tree/thorsten Firmware der RS485 (Wired) Version]<br />
* [https://github.com/kc-GitHub/Wettersensor/raw/master/Schematic/Schematic-RF.pdf Schaltplan und Platinenlayout der CC1101 (Funk) Version]<br />
* [https://github.com/kc-GitHub/HM485-Lib/raw/thorsten/Schematic/Schematic-WIRED.pdf Schaltplan und Platinenlayout der RS485 (Wired) Version]<br />
* [http://forum.fhem.de/index.php/topic,20620.0.html Thread im FHEM-Forum]<br />
* [http://forum.fhem.de/index.php/topic,22952.0.html Thread im FHEM-Forum zur Entwicklung der Wired-Firmware]<br />
[[Kategorie:HomeBrew]]<br />
[[Kategorie:HomeMatic Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Universalsensor&diff=13239Universalsensor2015-12-13T15:39:04Z<p>No Legend: /* Der Helligkeitssensor */ Anweisung für userreading hinzu</p>
<hr />
<div>[[Datei:Universalsensor-CC1101-Innen.jpg|200px|thumb|right|Universalsensor im Innengehäuse]]<br />
[[Datei:Universalsensor-CC1101-Aussen.jpg|200px|thumb|right|Universalsensor im Außengehäuse]]<br />
<br />
== Übersicht ==<br />
Die Universalsensor-Platine ist eine Hardwareplattform um verschiedene Sensorwerte auch über unterschiedliche Übertragungsverfahren z.B. für die eigene Homeautomatisierung verfügbar zu machen.<br />
<br />
Hier werden die unterschiedliche Platinenlayouts, welche z.B. für einen Innensensor und einen Außensensor verwendet werden können, vorgestellt.<br />
<br />
Als Übertragungsmedien sind ein Funkmodul (CC1101) oder ein RS485 Tranceiver (LT1785 oder kompatibel) vorgesehen.<br />
<br />
Mit dem Funkmodul ist eine Anbindung an Funksysteme im 868 Mhz oder auch 433 Mhz-Band möglich. Hiermit kann der Sensor z.B. in ein Homematic Funksystem integriert werden. Aber auch andere Funksysteme sind über eine entsprechende Firmware zu realisieren.<br />
<br />
Mit dem RS485 Tranceiver ist z.B. auch eine Integration in das Homematic-Wired System möglich.<br />
<br />
Das Platinenlayout der Sensoren enthält zwei Pinleisten welche Arduino-Kompatibel sind. Als Mikrocontroller ist ein Atmega 328p bestückt.<br />
<br />
Über diese Erweiterungsports können auch zusätzlich eigene Sensoren oder auch Aktoren angeschlossen werden, diese müssen dann aber über eine Erweiterung der bestehenden Firmware oder mit eine eigene Firmware angesprochen werden.<br />
<br />
Die Spannungsversorgung erfolgt über 2 AA bzw. AAA Batterien. Damit eine möglichst gute Ausnutzung der Batteriekapazität erzielt wird und auch Sensoren mit 3,3 V Spannungsversorgung benutzt werden können, kann ein MAX1724 Stepup-Converter bestückt werden. Dieser stellt eine stabile Spannungsversorgung von 3,3&nbsp;V zur Verfügung. Als Mindest-Eingangsspannung sind hier dann lediglich 1,2&nbsp;V notwendig. Somit ist eine Versorgung auch aus nur einer Batteriezelle denkbar.<br />
<br />
Alternativ kann eine Spannungsversorgung über einen Schaltregler erfolgen. Diese Versorgung kommt bei der Bestückungsversion mit RS485-Tranceiver zum Einsatz. Aber auch bei Benutzung mit dem Funkmodul kann diese Spannungsversorgung eingesetzt werden.<br />
<br />
Der Schaltregler erlaubt dann einen recht breiten Eingangsspannungsbreich von 7 V bis 24 V. Außerdem steht dann intern zusätzlich zu den 3,3 V eine Spannung von 5 V zur Verfügung.<br />
<br />
== Innensensor ==<br />
[[Datei:Universalsensor-CC1101-Innen platine.jpg|200px|thumb|right|Universalsensor-Platine für das Innengehäuse. Hier noch ohne Bestückungsoption für RS485 und ohne bestückten SHT10 (Temperatur / Luftfeuchte)]]<br />
<br />
Das Layout des Innensensors unterstützt standardmäßig folgende Sensorbestückung:<br />
* Temperatur / Feuchte (STH10)<br />
* Temperatur / Luftdruck (BMP180)<br />
* Helligkeit (TSL2561)<br />
Zusätzlich können über die zwei Pinleisten eigene Sensoren z.B. über eine Erweiterungsplatine angeschlossen werden. Als Beispiel ist hier eine Firmwareversion genannt, bei der mehrere 1-Wire Sensoren an den Sensor angeschlossen werden und abgefragt werden können.<br />
Zusätzlich zu den unterschiedlichen bestückbaren Sensoren, kann der Innensensor alternativ zum Funkmodul mit einem RS485 Tranceiver bestückt werden.<br />
Als Spannungsversorgung steht eine Batterieversorgung (1,2 - 3V) oder eine Spannungsversorgung über einen Schaltregler (7 V - 24 V zur Verfügung)<br />
<br />
== Außensensor ==<br />
[[Datei:Universalsensor-CC1101-Aussen_platine.jpg|200px|thumb|right|Universalsensor-Platine für das Außengehäuse mit Beschreibung der I2C-Anschlussbelegung.]]<br />
<br />
Die Platinengröße des Außensensors ist deutlich kompakter als der Innensensor. Daher ist in dieser Version derzeit nur das Funkmodul bestückbar. Andere Übertragungsverfahren wie z.B. RS485 müssten hier extern realisiert werden.<br />
Das Layout des Außensensors unterstützt standardmäßig folgende Sensorbestückung:<br />
* Temperatur / Luftdruck (BMP180)<br />
* Helligkeit (TSL2561)<br />
Weitere Sensoren z.B. ein STH10 für Temperatur/Luftfeuchte können über den nach außen geführten I2C-Bus angeschlossen werden. Natürlich existiert auch beim Außensensor die Möglichkeit weitere Sensoren oder auch Aktoren über die beiden Pinleisten anzuschließen.<br />
<br />
Dieser {{Link2Forum|Topic=20620|Message=182690|LinkText=Forenbeitrag}} beschreibt, wie der SHT10 auch innerhalb eines Gehäuses benutzt werden kann.<br />
<br />
Um die Platine im Gehäuse zu fixieren, wird auf einer Seite des Batteriehalters ein kleiner Schaumstoffblock aufgeklebt (siehe nebenstehendes Foto)<br />
<br />
== Der Helligkeitssensor ==<br />
[[Datei:SHT10_breakout.jpg|200px|thumb|right|SHT10 Breakout-Board für den Außensensor.]]<br />
[[Datei:CC1101-Sensor-Außen_mit_Filterfolie.JPG|200px|thumb|right|Das Außengehäuse mit Filterfolie.]]<br />
[[Datei:Innensensor_Loch_für_Acrylstab_Maße.jpg|200px|thumb|right|Bohrvorlage für den Acrylstab im Innengehäuse.]]<br />
Der Helligkeitssensor braucht zum sinnvollen Einsatz natürlich die Möglichkeit vom Umgebungslicht beleuchtet zu werden.<br />
Da der Sensor im Innengehäuse nahe der Lüftungsschlitzen sitzt, wird dieser dadurch bereits beleuchtet. Allerdings fällt hier nur wenig Licht auf den Sensor. Daher ist bei dieser Messmethode die erreichbare Auflösung sehr gering.<br />
<br />
Die bessere Möglichkeit ist es, in die Abdeckung des Sensorgehäuses ein 5 mm großes Loch zu bohren. In das Loch wird dann ein kurzer Stift aus Acrylglas eingesetzt. Siehe Bild mit der Bohrvorlage. Achtung, das Loch ist in horizontaler Ausrichtung nicht genau mittig.<br />
Der Acrylstab hat nicht genau 5 mm Durchmesser. Es sind 5,2 mm. Man kann dennoch ein 5 mm Loch bohren. Das Einschieben des Stabes in das Loch geht dann allerdings ziemlich schwer. Vor dem Einschieben kann man den Acrylstab an der Innenseite noch leicht anfasen. Dann lässt er sich leichter in das Loch schieben. Die Länge des Acrylstabes Beträgt 17 mm.<br />
<br />
Im Außensensor ist die ausreichende Beleuchtung bereits durch die transparente Gehäuseoberseite gewährleistet. Allerdings wird der Sensor in direkter Sonneneinstrahlung übersteuern. Daher kann hier zwischen Sensor und Deckel eine Filterfolie eingelegt werden.<br />
Die getestete Filterfolie lässt dann nur noch etwa 25% des Lichtes durch. Dadurch ist eine Lage ausreichend, damit der Sensor auch im Sommer bei voller Sonneneinstrahlung nicht mehr übersteuert. Durch den bekannten Filterwert der Folie lässt sich so auch gut ein Umrechnungsfaktor für die Heligkeitsmessung in Lux z.B. in FHEM hinterlegen.<br />
<br />
Eine Testreihe mit der Folie im Vergleich mit einem kommerziellen Luxmeter hat den Faktor 0,265 ergeben.<br />
<br />
Mit Folie bekommt man mit einer Division durch 0,265 auf den aktuellen Lux-Wert:<br />
<br />
$lux = $lum/0.265<br />
<br />
Um den Wert mit Folie unterhalb des Devices angezeigt zu bekommen, muss man hierfür ein userreading erstellten.<br />
Die erfolgt mit folgendem Befehl:<br />
<code><br />
attr Outdoor.Helligkeit userReadings luminosity2 { ReadingsVal("Outdoor.Helligkeit","luminosity",0)/0.265;; }<br />
</code><br />
Das Devices hier im Beispiel Outdoor.Helligkeit muss gegen den eigenen Device Namen ausgetauscht werden.<br />
Werden zwei Folien benutzt muss der Wert von 0.265 angepasst werden.<br />
Nun ist es möglich den Richtigen wert unter dem Reading luminosity2 abzufragen<br />
<br />
== Firmware ==<br />
[[Datei:CC1101-Sensor_Firmwareupdate_mit_dem_Raspberry_Pi.jpg|200px|thumb|right|Firmwareupdate mit dem Raspberry Pi.]]<br />
<br />
Aktuell existieren für den Sensor zwei verschiedene Firmwareversionen.<br />
<br />
* [[HB-UW-Sen-THPL]] HB-UW-Sen-THPL-I, HB-UW-Sen-THPL-O (Version 0.14)<br />
: Homematic-Kompatibler Temperatur / Feuchte / Luftdruck / Helligkeitssensor für das Innengehäuse oder Außengehäuse<br />
<br />
* HWB-ONEWIRE (Experimentel)<br />
: Homematic-Wired Kompatibles 1-Wire-Temperatursensor-interface<br />
<br />
HB-UW-Sen-THPL-I und HB-UW-Sen-THPL-O unterscheiden sich nur durch die Geräte-ID. Dadurch ist es Möglich dass die Sensoren z.B. in der CCU über ein eigenes Icon verfügt.<br />
<br />
'''Configtaster'''<br />
<br />
Drückt man den Configtaster auf der Platine im Betrieb 1x, so startet man das [[HomeMatic_Devices_pairen|Pairing]]. Die LED fängt langsam an zu blinken. Drückt man den Taster nun nochmal, aber deutlich länger, blinkt die LED sehr schnell (jetzt loslassen). Jetzt kann der Sensor resettet werden. Dazu drückt man den Taster erneut, bis die LED ausgeht. Der Sensor hat sich nun zurückgesetzt.<br />
<br />
'''Firmwarekonfiguration'''<br />
<br />
Auf einige Einstellungen des Sensors lässt sich über die Kommandozeile Einfluss nehmen. Dazu "set <sensorname> regSet <register> <wert>" eingeben.<br />
<br />
;altitude<br />
:Die Höhe des Sensors über NN in Metern. Ist ein Luftdrucksensor vorhanden, dann wird der ermittelte Druck automatisch auf Druck in NN umgerechnet.<br />
;burstRx (noch experimentell)<br />
:Hierbei bleibt der Sensor dauerhaft Empfangsbereit bei höherem Batterieverbrauch. Damit soll es möglich sein, die Sensorwerte on demand vom Sensor anzufordern.<br />
;ledMode<br />
:''on'' die LED leuchtet, wenn der Sensor Daten überträgt, ''off'' die LED leuchtet beim Übertragen der Daten nicht<br />
;lowBatLimitTHPL<br />
:Batteriespannung, ab der die Warnung für den Batteriewechsel ausgegeben wird.<br />
;pairCentral<br />
:???<br />
;transmDevTryMax<br />
:Anzahl der Wiederholungssendungen, sofern kein ACK empfangen wurde.<br />
<br />
[[Datei:Universalsensor-RS485_mit_1-Wire-Sensoren.jpg|200px|thumb|right|Universalsensor-RS485-Version. Hier mit angeschlossenen 1-Wire Temperatursensoren]]<br />
<br />
[[Datei:Universalsensor-RS485-Innen_Platine.jpg|200px|thumb|right|Universalsensor-RS485-Version. Hier mit optional bestückten SHT10 (Temperatur / Luftfeuchte), BMP180 (Luftdruck), TSL2561 (Helligkeit)]]<br />
<br />
== OTA (OverTheAir) Firmwareupdate ==<br />
Die Firmware des Sensor lässt sich, sofern er den so genannten OTAU-Bootloader besitzt einfach per Funk updaten.<br />
OTA-Update = ('''O'''ver '''T'''he '''A'''ir, -Update also per Funk)<br />
<br />
Das Firmwareupdate funktioniert aktuell nur mit CUL/COC oder HM-CFG-USB unter Linux ([[HomeMatic_Firmware_Update#Firmware_Update_mit_CUL.2FHM-CFG-USB_unter_FHEM|Update mit CUL oder HM-CFG-USB unter Linux]]), mit dem "HomeMatic Firmware Update Tool" unter Windows ([[HomeMatic_Firmware_Update#Firmware_Update_mit_HM-CFG-USB_unter_Windows|Update mit HM-CFG-USB unter Windows]]) oder mit einer CCU2. Ein <code>set sensorname fwUpdate dateiname</code> in der Kommandozeile von FHEM funktioniert derzeit noch nicht.<br />
<br />
Für das Update mit flash-ota ist folgendes zu machen:<br />
<br />
# [[HomeMatic_Firmware_Update#Firmware_Update_mit_CUL.2FHM-CFG-USB_unter_FHEM|flash-ota herunterladen und installieren]].<br />
# Firmware aus dem ZIP rausholen: https://github.com/kc-GitHub/Wettersensor/archive/v0.14_beta.zip<br />
# flash-ota starten. Z.B. so: <code>sudo ./flash-ota -c /dev/ttyACM0 -f <firmware-file.eq3> -s <seriennummer></code><br />
# eine Batterie aus dem Sensor heraus nehmen, Configtaste drücken und gedrückt halten, Batterie wieder einlegen während die Configtaste weiter gedrückt bleibt.<br />
# Jetzt sollte der Updateprozess starten.<br />
# Sensor mit FHEM neu pairen. Dann erscheint auch die neue Firmwareversion in FHEM.<br />
<br />
== Weitere Firmwareupdate-Möglichkeiten ==<br />
<br />
Alternativ kann der Atmega328p auf der Platine mit einem Arduino-Kompatiblen Bootloader ausgerüstet werden.<br />
Damit lässt sich dann das Firmwareupdate per USB-UART-Adapter oder auch über den UART-Anschluss von einem [[Raspberry Pi]] einspielen.<br />
<br />
== RS485-Version mit 1-Wire Temperatursensoren ==<br />
Hier ist eine experimentelle Firmware mit der man derzeit die RS485-Version des Sensors in eine 1-Wire - Homematic-Wired Interface "verwandeln" kann.<br />
Weiteres ist unter [[ HWB-1WIRE-TMP10 ]] nachzulesen.<br />
<br />
== Inbetriebnahme ==<br />
# Batterien einlegen<br />
# Stelle sicher, dass das Konfigurationsmodul des Sensors "HMConfig_SenTHPL.pm" im Unterverzeichnis FHEM ist. Ist dem nicht so, [https://github.com/kc-GitHub/Wettersensor/blob/master/Contrib/FHEM/HMConfig_SenTHPL.pm lade die Datei herunter] und lege sie dort ab. Danach muss FHEM neu gestartet werden ("shutdown restart" in die Kommandozeile eingeben)<br />Achtung! Wer mit wget den normalen Link verwendet bekommt folgenden Fehler:<br /><code> Error loading file: /usr/share/fhem/FHEM/HMConfig_SenTHPL.pm: Unrecognized character \\xC2; marked by \<-- HERE after at master \<-- HERE near column 55 at /usr/share/fhem/FHEM/HMConfig_SenTHPL.pm line 13, <$fh> line 105.</code><br />Darum den raw Link verwenden:<br /><code><nowiki>sudo wget https://github.com/kc-GitHub/Wettersensor/raw/master/Contrib/FHEM/HMConfig_SenTHPL.pm</nowiki></code><br />
# [[HomeMatic_Devices_pairen|CUL in den Pairingmodus schalten]]<br />
# Configtaster auf dem Universalsensor drücken<br />
<br />
== Links ==<br />
* [https://github.com/kc-GitHub/Wettersensor Firmware der CC1101 (Funk) Version]<br />
* [https://github.com/kc-GitHub/HM485-Lib/tree/thorsten Firmware der RS485 (Wired) Version]<br />
* [https://github.com/kc-GitHub/Wettersensor/raw/master/Schematic/Schematic-RF.pdf Schaltplan und Platinenlayout der CC1101 (Funk) Version]<br />
* [https://github.com/kc-GitHub/HM485-Lib/raw/thorsten/Schematic/Schematic-WIRED.pdf Schaltplan und Platinenlayout der RS485 (Wired) Version]<br />
* [http://forum.fhem.de/index.php/topic,20620.0.html Thread im FHEM-Forum]<br />
* [http://forum.fhem.de/index.php/topic,22952.0.html Thread im FHEM-Forum zur Entwicklung der Wired-Firmware]<br />
[[Kategorie:HomeBrew]]<br />
[[Kategorie:HomeMatic Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:No_Legend&diff=13213Benutzer Diskussion:No Legend2015-12-09T21:01:39Z<p>No Legend: /* VELUX Solar-Rollladen... und hochgeladene Bilder */</p>
<hr />
<div>== Willkommen! ==<br />
{| width="100%" cellspacing="0" cellpadding="6" style="line-height: 20px; background: #E0E0E0; border: 2px solid #1874CD;"<br />
|-<br />
| colspan="4" style="background:#1874CD;" |<big><span style="color: #FAFAFA">'''Hallo No Legend,''' willkommen im FHEM Wiki!</span></big><br />
|-<br />
| colspan="4" | Danke für dein Interesse an unserem Projekt, ich freue mich schon auf deine weiteren Beiträge. Die folgenden Seiten sollten dir die ersten Schritte erleichtern, bitte nimm dir daher etwas Zeit, sie zu lesen.<br />
<br />
----<br />
'''FHEM-spezifische Informationen'''<br />
<br />
|-<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[Systemübersicht]]'''<br />''FHEM Systemübersicht''<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[FHEMWiki:Über FHEMWiki]]'''<br />''Informationen über dieses Wiki''<br />
<!-- Abschnitt auf Kommentar gesetzt<br />
|-<br />
| colspan="4" |<br />
----<br />
<br />
{{Todo|FHEM-spezifische Anleitungen und Regeln.}}<br />
<br />
---- <br />
Ende von 'Abschnitt auf Kommentar gesetzt' --><br />
|-<br />
| colspan="4" | <br />
----<br />
'''Generelle Informationen über (Media)Wikis'''<br />
|-<br />
| width="8%" | [[Datei:Crystal Clear app kedit.svg|rechts|30px|link=Hilfe:Bearbeiten]]<br />
| width="38%" | '''[[Hilfe:Bearbeiten]]'''<br />''Zugang zu allen wichtigen Informationen.''<br />
| width="8%" | [[Datei:X-office-presentation.svg|rechts|30px|link=Wikipedia:Tutorial]]<br />
| width="38%" | <!-- '''[[Wikipedia:Tutorial]]'''-->'''[http://de.wikipedia.org/wiki/Wikipedia:Tutorial Wikipedia:Tutorial]'''<br />''Schritt-für-Schritt-Anleitung für Einsteiger.''<br />
|-<br />
| [[Datei:Applications-system.svg|rechts|30px|link=Wikipedia:Grundprinzipien]]<br />
| '''<!--[[Wikipedia:Grundprinzipien]]-->[http://de.wikipedia.org/wiki/Wikipedia:Grundprinzipien Wikipedia:Grundprinzipien]'''<br />''Die grundlegende Philosophie unseres Projekts.''<br />
| [[Datei:MentorenProgrammLogo-7.svg|rechts|60px|link=Wikipedia:Mentorenprogramm]]<br />
| '''<!--[[Wikipedia:Mentorenprogramm]]-->[http://de.wikipedia.org/wiki/Wikipedia:Mentorenprogramm Wikipedia:Mentorenprogramm]'''<br />''Persönliche Einführung in die Beteiligung bei Wikipedia.''<br />
|-<br />
| colspan="4" |<br />
----<br />
Bitte beachte, [[Wikipedia:Was Wikipedia nicht ist|was Wikipedia nicht ist]], und "unterschreibe" deine Diskussionsbeiträge durch Eingabe von <code>--<nowiki>~~~~</nowiki></code> oder durch Drücken der Schaltfläche [[Datei:button_sig.png|Signaturknopf|20px|link=Hilfe:Signatur]] über dem Bearbeitungsfeld. Artikel werden jedoch nicht unterschrieben, und wofür die Zusammenfassungszeile da ist, erfährst du unter [[wikipedia:Hilfe:Zusammenfassung und Quellen|Hilfe:Zusammenfassung und Quellen]]. <br /><br /><br />
[[Datei:Nuvola apps ksirc.png|25px|link=Benutzer Diskussion:Ph1959de]] &nbsp;&nbsp; '''Hast du Fragen an mich?''' Schreib mir auf [[Benutzer Diskussion:Ph1959de|<u>meiner</u> Diskussionsseite]]! Viele Grüße, [[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:55, 29. Jun. 2014 (UTC)<br />
|}<br />
<br />
== VELUX Solar-Rollladen... und hochgeladene Bilder ==<br />
<br />
Hallo No Legend,<br />
<br />
* du hast in den letzten Tagen intensiv an der "VELUX Solar-Rollladen..."-Seite gearbeitet und auch Dateien/Bilder eingebunden. Hast Du zu den Bildern die Copyright-Frage geklärt? Soweit ich sehen kann (hast Du ja auch bei den Meta-Daten angegeben) stammen die von anderen Webseiten ... was nicht notwendigerweise bedeutet, dass man die einfach so kopieren und anderweitig nutzen darf. Ich möchte Dich bitten, das Copyright zu klären und falls die Erlaubnis nicht kommt, die Bilder zu entfernen bzw. durch selbstgemachte Fotos zu ersetzen.<br />
::Hallo Peter,ich habe immer gedacht, dass ein Quellverweis reicht um aus dem Copyright raus zu sein. Wäre denn eine Externe Verlinkung auf die Bilder zulässig? Bin im Wiki Thema recht neu.<br />
:::(Ph1959de) Such doch mal nach "Produktbilder" und "Urheberrecht" - ich denke, die häufigste Meinung dazu ist: Verwendung/Kopie nicht erlaubt. Bei den beiden Bildern im Artikel sehe ich ohnehin nicht die dringende Notwendigkeit, sie direkt einzubinden ... also, wenn überhaupt, dann die Seite verlinken (mit einem kurzen Hinweis, warum es sinnvoll ist, sich das anzuschauen).<br />
:::(Ph1959de) Angesichts der rechtlichen Unsicherheit möchte ich gern die beiden Bilder löschen.<br />
Kein Ding. Kannst beide Bilder löschen. Werde die FB selber fotografieren. hab ja selbst welche ;-)<br />
<br />
* Zur Einbindung der Modul-Infobox: hier wäre es mir lieber, Du würdest die SOMFY Modulseite anlegen und da die Basisbeschreibung erstellen. Die VELUX...-Seite kann/sollte dann wechselseitig verlinkt werden.<br />
::Für das Somfy Modul einen Eintrag zu verfassen sehe ich nicht als Sinvoll für mich an. Ich benutzte es nur für meinen Anwendungsfall und kann nicht alles abdecken.<br />
:::(Ph1959de) Das ändert aber nichts daran, dass das hier nicht die SOMFY Modulseite ist. Ich mache mal die Änderung (SOMFY-Seite angelegt).<br />
Alles klar. Gibt es eigentlich für eine Howto solche speziellen Boxen für oben rechts?<br />
<br />
* Und, abschließend: ich habe die Seite nicht intensiv gelesen, bin aber der Ansicht, es sollte auch beim kurzen Überfliegen klar werden, worum es überhaupt geht. Ist "VELUX Solar-Rollladen SSL" ein Modul (wie Du durch Einbindung der Modul-Infobox suggerierst), ist es Hardware oder "nur" ein HowTo zur Einbindung eines speziellen Rollladen-Typs in FHEM?<br />
::Eigentlich denke ich ist es eher als Howto zu sehen. Gibt es eine Modulbox für ein Howto? Ich finde es nicht schlecht immer wiederkehrende Elemente benutzten, damit sich die Leute schnell zurecht finden. Verlinkung auf Command Ref, Forums Thread usw.<br />
:::(Ph1959de) Eine Übersicht über die im FHEM-Wiki verfügbaren Vorlagen findest Du auf [[FHEMWiki:Über FHEMWiki]]. Den Nutzen einer Howto Infobox kann ich noch nicht erkennen.<br />
: Ein Tipp: beginne die Seite mit (sinngemäß) ''VELUX Solar-Rollladen SSL ist ein/eine ... der/die dazu dient ...'' anstelle des Texts, den Du derzeit unter der Überschrift ''Vorwort'' stehen hast (die Überschrift kann dann auch gleich entfallen; schau Dir einfach mal einen fast beliebigen Wikipedia-Artikel an, ich hoffe, dann wird verständlich, was ich meine). --[[Benutzer:Ph1959de|Peter]] <br />
<br />
::Hast du eine Artikel an dem ich mich orientieren kann?<br />
:::(Ph1959de) Wie gesagt, fast jeder Wikipedia Artikel. FHEM-Wiki-seitig vielleicht "[[FHEMWiki:Über FHEMWiki#Beispiel: Neuer Artikel|Neuer Artikel]]" (generell) oder z.B. "[[update]]" (oder viele andere Seiten, die die Infobox Modul benutzen).<br />
Schau ich nach.<br />
<br />
Dank dir Peter, bin im Wiki Geschäft noch recht neu.<br />
([[Benutzer Diskussion:Ph1959de|Diskussion]]) 11:57, 8. Dez. 2015 (CET)<br />
:::(Ph1959de) --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 10:53, 9. Dez. 2015 (CET)</div>No Legendhttp://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:No_Legend&diff=13198Benutzer Diskussion:No Legend2015-12-08T13:41:09Z<p>No Legend: /* VELUX Solar-Rollladen... und hochgeladene Bilder */</p>
<hr />
<div>== Willkommen! ==<br />
{| width="100%" cellspacing="0" cellpadding="6" style="line-height: 20px; background: #E0E0E0; border: 2px solid #1874CD;"<br />
|-<br />
| colspan="4" style="background:#1874CD;" |<big><span style="color: #FAFAFA">'''Hallo No Legend,''' willkommen im FHEM Wiki!</span></big><br />
|-<br />
| colspan="4" | Danke für dein Interesse an unserem Projekt, ich freue mich schon auf deine weiteren Beiträge. Die folgenden Seiten sollten dir die ersten Schritte erleichtern, bitte nimm dir daher etwas Zeit, sie zu lesen.<br />
<br />
----<br />
'''FHEM-spezifische Informationen'''<br />
<br />
|-<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[Systemübersicht]]'''<br />''FHEM Systemübersicht''<br />
| width="8%" | &nbsp;<br />
| width="38%" | '''[[FHEMWiki:Über FHEMWiki]]'''<br />''Informationen über dieses Wiki''<br />
<!-- Abschnitt auf Kommentar gesetzt<br />
|-<br />
| colspan="4" |<br />
----<br />
<br />
{{Todo|FHEM-spezifische Anleitungen und Regeln.}}<br />
<br />
---- <br />
Ende von 'Abschnitt auf Kommentar gesetzt' --><br />
|-<br />
| colspan="4" | <br />
----<br />
'''Generelle Informationen über (Media)Wikis'''<br />
|-<br />
| width="8%" | [[Datei:Crystal Clear app kedit.svg|rechts|30px|link=Hilfe:Bearbeiten]]<br />
| width="38%" | '''[[Hilfe:Bearbeiten]]'''<br />''Zugang zu allen wichtigen Informationen.''<br />
| width="8%" | [[Datei:X-office-presentation.svg|rechts|30px|link=Wikipedia:Tutorial]]<br />
| width="38%" | <!-- '''[[Wikipedia:Tutorial]]'''-->'''[http://de.wikipedia.org/wiki/Wikipedia:Tutorial Wikipedia:Tutorial]'''<br />''Schritt-für-Schritt-Anleitung für Einsteiger.''<br />
|-<br />
| [[Datei:Applications-system.svg|rechts|30px|link=Wikipedia:Grundprinzipien]]<br />
| '''<!--[[Wikipedia:Grundprinzipien]]-->[http://de.wikipedia.org/wiki/Wikipedia:Grundprinzipien Wikipedia:Grundprinzipien]'''<br />''Die grundlegende Philosophie unseres Projekts.''<br />
| [[Datei:MentorenProgrammLogo-7.svg|rechts|60px|link=Wikipedia:Mentorenprogramm]]<br />
| '''<!--[[Wikipedia:Mentorenprogramm]]-->[http://de.wikipedia.org/wiki/Wikipedia:Mentorenprogramm Wikipedia:Mentorenprogramm]'''<br />''Persönliche Einführung in die Beteiligung bei Wikipedia.''<br />
|-<br />
| colspan="4" |<br />
----<br />
Bitte beachte, [[Wikipedia:Was Wikipedia nicht ist|was Wikipedia nicht ist]], und "unterschreibe" deine Diskussionsbeiträge durch Eingabe von <code>--<nowiki>~~~~</nowiki></code> oder durch Drücken der Schaltfläche [[Datei:button_sig.png|Signaturknopf|20px|link=Hilfe:Signatur]] über dem Bearbeitungsfeld. Artikel werden jedoch nicht unterschrieben, und wofür die Zusammenfassungszeile da ist, erfährst du unter [[wikipedia:Hilfe:Zusammenfassung und Quellen|Hilfe:Zusammenfassung und Quellen]]. <br /><br /><br />
[[Datei:Nuvola apps ksirc.png|25px|link=Benutzer Diskussion:Ph1959de]] &nbsp;&nbsp; '''Hast du Fragen an mich?''' Schreib mir auf [[Benutzer Diskussion:Ph1959de|<u>meiner</u> Diskussionsseite]]! Viele Grüße, [[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:55, 29. Jun. 2014 (UTC)<br />
|}<br />
<br />
== VELUX Solar-Rollladen... und hochgeladene Bilder ==<br />
<br />
Hallo No Legend,<br />
<br />
* du hast in den letzten Tagen intensiv an der "VELUX Solar-Rollladen..."-Seite gearbeitet und auch Dateien/Bilder eingebunden. Hast Du zu den Bildern die Copyright-Frage geklärt? Soweit ich sehen kann (hast Du ja auch bei den Meta-Daten angegeben) stammen die von anderen Webseiten ... was nicht notwendigerweise bedeutet, dass man die einfach so kopieren und anderweitig nutzen darf. Ich möchte Dich bitten, das Copyright zu klären und falls die Erlaubnis nicht kommt, die Bilder zu entfernen bzw. durch selbstgemachte Fotos zu ersetzen.<br />
<br />
Hallo Peter,<br />
ich habe immer gedacht, dass ein Quellverweis reicht um aus dem Copyright raus zu sein.<br />
Währe den eine Externe Verlinkung auf die Bilder zulässig?<br />
Bin im Wiki Thema recht neu.<br />
<br />
* Zur Einbindung der Modul-Infobox: hier wäre es mir lieber, Du würdest die SOMFY Modulseite anlegen und da die Basisbeschreibung erstellen. Die VELUX...-Seite kann/sollte dann wechselseitig verlinkt werden.<br />
<br />
Für das Somfy Modul einen Eintrag zu verfassen sehe ich nicht als Sinvoll für mich an.<br />
Ich benutzte es nur für meinen Anwendungsfall und kann nicht alles abdecken.<br />
<br />
* Und, abschließend: ich habe die Seite nicht intensiv gelesen, bin aber der Ansicht, es sollte auch beim kurzen Überfliegen klar werden, worum es überhaupt geht. Ist "VELUX Solar-Rollladen SSL" ein Modul (wie Du durch Einbindung der Modul-Infobox suggerierst), ist es Hardware oder "nur" ein HowTo zur Einbindung eines speziellen Rollladen-Typs in FHEM?<br />
<br />
Eigentlich denke ich ist es eher als Howto zu sehen.<br />
Gibt es eine Modulbox für ein Howto?<br />
Ich finde es nicht schlecht immer wiederkehrende Elemente benutzten, damit sich die Leute schnell zurecht finden.<br />
Verlinkung auf Command Ref, Forums Thread usw.<br />
<br />
: Ein Tipp: beginne die Seite mit (sinngemäß) ''VELUX Solar-Rollladen SSL ist ein/eine ... der/die dazu dient ...'' anstelle des Texts, den Du derzeit unter der Überschrift ''Vorwort'' stehen hast (die Überschrift kann dann auch gleich entfallen; schau Dir einfach mal einen fast beliebigen Wikipedia-Artikel an, ich hoffe, dann wird verständlich, was ich meine). --[[Benutzer:Ph1959de|Peter]] <br />
<br />
Hast du eine Artikel an dem ich mich orientieren kann?<br />
<br />
([[Benutzer Diskussion:Ph1959de|Diskussion]]) 11:57, 8. Dez. 2015 (CET)</div>No Legendhttp://wiki.fhem.de/w/index.php?title=VELUX_Solar-Rollladen_SSL&diff=13189VELUX Solar-Rollladen SSL2015-12-08T10:25:04Z<p>No Legend: </p>
<hr />
<div>{{SEITENTITEL:VELUX Solar-Rollladen SSL}}<br />
{{Infobox Modul<br />
|Bild=Velux_solar.jpg<br />
|Bildbeschreibung=Beispiel Velux Solar Rolladen<br />
|ModPurpose=Einbindung von Velux Solar-Rollladen SSL in FHEM<br />
|ModType=d<br />
|ModCmdRef=SOMFY<br />
|ModForumArea=<br />
|ModTechName=10_SOMFY.pm<br />
|ModOwner=({{Link2FU|8175|Forum}}/[[Benutzer Diskussion:no_Legend|Wiki]])<br />
}}<br />
<br />
== Vorwort ==<br />
Die Steuerung läuft bei mir selbst nun seit ein paar Tagen.<br />
Erfahrungen über einen längeren Zeitraum sind noch nicht vorhaden.<br />
Bis jetzt läuft es aber stabil.<br />
<br />
Es wird zwingend ein 433MHz Sender benötigt.<br />
CUL oder ähnliches.<br />
Man kann auch einen 866MHz zum Testen benutzten, wobei hier die Reichweiten Verkürzung zu beachten ist.<br />
<br />
== Nachteil ==<br />
Wird der Rolladen per Fernbedienung bewegt, bekommt dies FHEM nicht mit.<br />
Somit ist die Position des Rolladen nicht festzustellen.<br />
<br />
<br />
Die Position des Rolladen wird über die Dauer der zu fahrenden Zeit berechnet.<br />
Der Rolladen versendet seine Position nicht per Rückkanal.<br />
<br />
Desweitern sind die Commands des Somfy Moduls nicht deckend zu den Homematic Befehlen. Stand 2015-12-11<br />
<br />
== Verwendete Module ==<br />
Zur Steuerung wird das Somfy Rolladen Modul benutzt.<br />
Command Ref [http://fhem.de/commandref.html]<br />
<br />
== Erkennung der Steuerbaren Rolladen ==<br />
Es ist nur bekannt, dass die Rolläden mit folgendern Fernbedienung per FHEM zu steuern sind:<br />
[[Datei:Velux_ssl_solar_433_alt.png|240px|thumb|left|Velux 433MHz Fernbedienung Alt]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Device in FHEM anlegen ==<br />
Ich empfehle das Device als neue Fernbedienung an den Rolladen anzulernen.<br />
<br />
Zuerst muss das Device in FHEM angelegt werden, '''Achtung jedes FHEM Device benötigt eine eindeutige ID.'''<br />
Es darf nicht zwei mal die gleiche ID benutzt werden.<br />
Das Anlegen der Device erfolgt in FHEM mit folgenden Befehl:<br />
<source lang="bash" style="width:50%;"><br />
define Rolladen.Velux SOMFY 000001<br />
</source><br />
<br />
Genau Definition siehe Command Ref<br />
<br />
Nun nimmt man die vorhandene Fernbedienung und drückt den Roten Taster auf der Rückseite.<br />
Das der Rolladen im Anlern-Modus ist, wird durch kurzzeitiges Hoch und Runter fahren des Rolladens Signalisiert.<br />
<br />
Nun wird das Device mit folgendem Befehlt an den Rolladen angelernt:<br />
<source lang="bash" style="width:50%;"><br />
set Rolladen.Velux prog<br />
</source><br />
<br />
Der Rolladen sollte das erfolgreiche anlernen mit erneutem kurzen Hoch und Runter fahren signalisieren.<br />
<br />
== Rolladen Laufzeit einstellen ==<br />
Damit die Position berechnet werden kann müssen noch folgenden 4 attribute gesetzt werden.<br />
Ansonsten gibt es keinen Open oder Closed status, sowie keine Richtige Position.<br />
<source lang="bash" style="width:50%;"><br />
drive-down-time-to-100<br />
drive-down-time-to-close<br />
drive-up-time-to-100<br />
drive-up-time-to-open<br />
</source><br />
<br />
Definition der Befehle erneut im Command Ref.<br />
<br />
[[Kategorie:Rollladensteuerung]]<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=VELUX_Solar-Rollladen_SSL&diff=13188VELUX Solar-Rollladen SSL2015-12-08T10:22:37Z<p>No Legend: </p>
<hr />
<div>{{SEITENTITEL:VELUX Solar-Rollladen SSL}}<br />
{{Infobox Modul<br />
|Bild=Velux_solar.jpg<br />
|Bildbeschreibung=Beispiel Velux Solar Rolladen<br />
|ModPurpose=Einbindung von Velux Solar-Rollladen SSL in FHEM<br />
|ModType=d<br />
|ModCmdRef=SOMFY<br />
|ModForumArea=<br />
|ModTechName=10_SOMFY.pm<br />
|ModOwner=({{Link2FU|8175|Forum}}/[[Benutzer Diskussion:no_Legend|Wiki]])<br />
}}<br />
<br />
== Vorwort ==<br />
Die Steuerung läuft bei mir selbst nun seit ein paar Tagen.<br />
Erfahrungen über einen längeren Zeitraum sind noch nicht vorhaden.<br />
Bis jetzt läuft es aber stabil.<br />
<br />
Es wird zwingend ein 433MHz Sender benötigt.<br />
CUL oder ähnliches.<br />
Man kann auch einen 866MHz zum Testen benutzten, wobei hier die Reichweiten Verkürzung zu beachten ist.<br />
<br />
== Nachteil ==<br />
Wird der Rolladen per Fernbedienung bewegt, bekommt dies FHEM nicht mit.<br />
Somit ist die Position des Rolladen nicht festzustellen.<br />
<br />
<br />
Die Position des Rolladen wird über die Dauer der zu fahrenden Zeit berechnet.<br />
Der Rolladen versendet seine Position nicht per Rückkanal.<br />
<br />
Desweitern sind die Commands des Somfy Moduls nicht deckend zu den Homematic Befehlen. Stand 2015-12-11<br />
<br />
== Verwendete Module ==<br />
Zur Steuerung wird das Somfy Rolladen Modul benutzt.<br />
Command Ref [http://fhem.de/commandref.html<br/><br />
<br />
== Erkennung der Steuerbaren Rolladen ==<br />
Es ist nur bekannt, dass die Rolläden mit folgendern Fernbedienung per FHEM zu steuern sind:<br />
[[Datei:Velux_ssl_solar_433_alt.png|240px|thumb|left|Velux 433MHz Fernbedienung Alt]] <br />
== Device in FHEM anlegen ==<br />
Ich empfehle das Device als neue Fernbedienung an den Rolladen anzulernen.<br />
<br />
Zuerst muss das Device in FHEM angelegt werden, '''Achtung jedes FHEM Device benötigt eine eindeutige ID.'''<br />
Es darf nicht zwei mal die gleiche ID benutzt werden.<br />
Das Anlegen der Device erfolgt in FHEM mit folgenden Befehl:<br />
<source lang="bash" style="width:50%;"><br />
define Rolladen.Velux SOMFY 000001<br />
</source><br />
<br />
Genau Definition siehe Command Ref<br />
<br />
Nun nimmt man die vorhandene Fernbedienung und drückt den Roten Taster auf der Rückseite.<br />
Das der Rolladen im Anlern-Modus ist, wird durch kurzzeitiges Hoch und Runter fahren des Rolladens Signalisiert.<br />
<br />
Nun wird das Device mit folgendem Befehlt an den Rolladen angelernt:<br />
<source lang="bash" style="width:50%;"><br />
set Rolladen.Velux prog<br />
</source><br />
<br />
Der Rolladen sollte das erfolgreiche anlernen mit erneutem kurzen Hoch und Runter fahren signalisieren.<br />
<br />
== Rolladen Laufzeit einstellen ==<br />
Damit die Position berechnet werden kann müssen noch folgenden 4 attribute gesetzt werden.<br />
Ansonsten gibt es keinen Open oder Closed status, sowie keine Richtige Position.<br />
<source lang="bash" style="width:50%;"><br />
drive-down-time-to-100<br />
drive-down-time-to-close<br />
drive-up-time-to-100<br />
drive-up-time-to-open<br />
</source><br />
<br />
Definition der Befehle erneut im Command Ref.<br />
<br />
[[Kategorie:Rollladensteuerung]]<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=VELUX_Solar-Rollladen_SSL&diff=13187VELUX Solar-Rollladen SSL2015-12-08T10:19:34Z<p>No Legend: /* Erkennung der Steuerbaren Rolladen */</p>
<hr />
<div>{{SEITENTITEL:VELUX Solar-Rollladen SSL}}<br />
{{Infobox Modul<br />
|Bild=Velux_solar.jpg<br />
|Bildbeschreibung=Beispiel Velux Solar Rolladen<br />
|ModPurpose=Einbindung von Velux Solar-Rollladen SSL in FHEM<br />
|ModType=d<br />
|ModCmdRef=SOMFY<br />
|ModForumArea=<br />
|ModTechName=10_SOMFY.pm<br />
|ModOwner=({{Link2FU|8175|Forum}}/[[Benutzer Diskussion:no_Legend|Wiki]])<br />
}}<br />
<br />
== Vorwort ==<br />
Die Steuerung läuft bei mir selbst nun seit ein paar Tagen.<br />
Erfahrungen über einen längeren Zeitraum sind noch nicht vorhaden.<br />
Bis jetzt läuft es aber stabil.<br />
<br />
Es wird zwingend ein 433MHz Sender benötigt.<br />
CUL oder ähnliches.<br />
Man kann auch einen 866MHz zum Testen benutzten, wobei hier die Reichweiten Verkürzung zu beachten ist.<br />
<br />
== Nachteil ==<br />
Wird der Rolladen per Fernbedienung bewegt, bekommt dies FHEM nicht mit.<br />
Somit ist die Position des Rolladen nicht festzustellen.<br />
<br />
<br />
Die Position des Rolladen wird über die Dauer der zu fahrenden Zeit berechnet.<br />
Der Rolladen versendet seine Position nicht per Rückkanal.<br />
<br />
Desweitern sind die Commands des Somfy Moduls nicht deckend zu den Homematic Befehlen. Stand 2015-12-11<br />
<br />
== Verwendete Module ==<br />
Zur Steuerung wird das Somfy Rolladen Modul benutzt.<br />
Command Ref [http://fhem.de/commandref.html#SOMFY]<br />
<br />
== Erkennung der Steuerbaren Rolladen ==<br />
Es ist nur bekannt, dass die Rolläden mit folgendern Fernbedienung per FHEM zu steuern sind:<br />
[[Datei:Velux_ssl_solar_433_alt.png|240px|thumb|left|Velux 433MHz Fernbedienung Alt]]<br />
<br />
<br />
== Device in FHEM anlegen ==<br />
Ich empfehle das Device als neue Fernbedienung an den Rolladen anzulernen.<br />
<br />
Zuerst muss das Device in FHEM angelegt werden, '''Achtung jedes FHEM Device benötigt eine eindeutige ID.'''<br />
Es darf nicht zwei mal die gleiche ID benutzt werden.<br />
Das Anlegen der Device erfolgt in FHEM mit folgenden Befehl:<br />
<source lang="bash" style="width:50%;"><br />
define Rolladen.Velux SOMFY 000001<br />
</source><br />
<br />
Genau Definition siehe Command Ref<br />
<br />
Nun nimmt man die vorhandene Fernbedienung und drückt den Roten Taster auf der Rückseite.<br />
Das der Rolladen im Anlern-Modus ist, wird durch kurzzeitiges Hoch und Runter fahren des Rolladens Signalisiert.<br />
<br />
Nun wird das Device mit folgendem Befehlt an den Rolladen angelernt:<br />
<source lang="bash" style="width:50%;"><br />
set Rolladen.Velux prog<br />
</source><br />
<br />
Der Rolladen sollte das erfolgreiche anlernen mit erneutem kurzen Hoch und Runter fahren signalisieren.<br />
<br />
== Rolladen Laufzeit einstellen ==<br />
Damit die Position berechnet werden kann müssen noch folgenden 4 attribute gesetzt werden.<br />
Ansonsten gibt es keinen Open oder Closed status, sowie keine Richtige Position.<br />
<source lang="bash" style="width:50%;"><br />
drive-down-time-to-100<br />
drive-down-time-to-close<br />
drive-up-time-to-100<br />
drive-up-time-to-open<br />
</source><br />
<br />
Definition der Befehle erneut im Command Ref.<br />
<br />
[[Kategorie:Rollladensteuerung]]<br />
[[Kategorie:Other Components]]</div>No Legendhttp://wiki.fhem.de/w/index.php?title=VELUX_Solar-Rollladen_SSL&diff=13186VELUX Solar-Rollladen SSL2015-12-08T10:19:15Z<p>No Legend: </p>
<hr />
<div>{{SEITENTITEL:VELUX Solar-Rollladen SSL}}<br />
{{Infobox Modul<br />
|Bild=Velux_solar.jpg<br />
|Bildbeschreibung=Beispiel Velux Solar Rolladen<br />
|ModPurpose=Einbindung von Velux Solar-Rollladen SSL in FHEM<br />
|ModType=d<br />
|ModCmdRef=SOMFY<br />
|ModForumArea=<br />
|ModTechName=10_SOMFY.pm<br />
|ModOwner=({{Link2FU|8175|Forum}}/[[Benutzer Diskussion:no_Legend|Wiki]])<br />
}}<br />
<br />
== Vorwort ==<br />
Die Steuerung läuft bei mir selbst nun seit ein paar Tagen.<br />
Erfahrungen über einen längeren Zeitraum sind noch nicht vorhaden.<br />
Bis jetzt läuft es aber stabil.<br />
<br />
Es wird zwingend ein 433MHz Sender benötigt.<br />
CUL oder ähnliches.<br />
Man kann auch einen 866MHz zum Testen benutzten, wobei hier die Reichweiten Verkürzung zu beachten ist.<br />
<br />
== Nachteil ==<br />
Wird der Rolladen per Fernbedienung bewegt, bekommt dies FHEM nicht mit.<br />
Somit ist die Position des Rolladen nicht festzustellen.<br />
<br />
<br />
Die Position des Rolladen wird über die Dauer der zu fahrenden Zeit berechnet.<br />
Der Rolladen versendet seine Position nicht per Rückkanal.<br />
<br />
Desweitern sind die Commands des Somfy Moduls nicht deckend zu den Homematic Befehlen. Stand 2015-12-11<br />
<br />
== Verwendete Module ==<br />
Zur Steuerung wird das Somfy Rolladen Modul benutzt.<br />
Command Ref [http://fhem.de/commandref.html#SOMFY]<br />
<br />
== Erkennung der Steuerbaren Rolladen ==<br />
Es ist nur bekannt, dass die Rolläden mit folgendern Fernbedienung per FHEM zu steuern sind:<br />
[[Datei:Velux_ssl_solar_433_alt.png|240px|thumb|left|Velux 433MHz Fernbedienung Alt]]<br />
<br />
<br />
<br />== Device in FHEM anlegen ==<br />
Ich empfehle das Device als neue Fernbedienung an den Rolladen anzulernen.<br />
<br />
Zuerst muss das Device in FHEM angelegt werden, '''Achtung jedes FHEM Device benötigt eine eindeutige ID.'''<br />
Es darf nicht zwei mal die gleiche ID benutzt werden.<br />
Das Anlegen der Device erfolgt in FHEM mit folgenden Befehl:<br />
<source lang="bash" style="width:50%;"><br />
define Rolladen.Velux SOMFY 000001<br />
</source><br />
<br />
Genau Definition siehe Command Ref<br />
<br />
Nun nimmt man die vorhandene Fernbedienung und drückt den Roten Taster auf der Rückseite.<br />
Das der Rolladen im Anlern-Modus ist, wird durch kurzzeitiges Hoch und Runter fahren des Rolladens Signalisiert.<br />
<br />
Nun wird das Device mit folgendem Befehlt an den Rolladen angelernt:<br />
<source lang="bash" style="width:50%;"><br />
set Rolladen.Velux prog<br />
</source><br />
<br />
Der Rolladen sollte das erfolgreiche anlernen mit erneutem kurzen Hoch und Runter fahren signalisieren.<br />
<br />
== Rolladen Laufzeit einstellen ==<br />
Damit die Position berechnet werden kann müssen noch folgenden 4 attribute gesetzt werden.<br />
Ansonsten gibt es keinen Open oder Closed status, sowie keine Richtige Position.<br />
<source lang="bash" style="width:50%;"><br />
drive-down-time-to-100<br />
drive-down-time-to-close<br />
drive-up-time-to-100<br />
drive-up-time-to-open<br />
</source><br />
<br />
Definition der Befehle erneut im Command Ref.<br />
<br />
[[Kategorie:Rollladensteuerung]]<br />
[[Kategorie:Other Components]]</div>No Legend